数据结构—平衡二叉树

news2024/11/19 19:39:31

文章目录

  • 查询数据的时间复杂度
  • 平衡二叉树
    • 旋转策略
      • 1、LL型旋转:
      • 2、RR型旋转:
      • 3、LR型旋转:
      • 4、RL型旋转:
    • 补充:

————————————————————————————————

查询数据的时间复杂度

首先,数组查询数据的时间复杂度是O(n)——>如何降低查询的时间复杂度?
—1—>二分法: 时间复杂度O(logn)—>要使用二分法,数据必须有序—>排序的时间复杂度O(n)—>因此,总的时间复杂度O(nlogn)
在这里插入图片描述

—2—>哈希表: 根据一个式子(如:n%arr.length)计算数据要放入的地址—>要查找某一个数时,直接根据数据找下标查询—>时间复杂度O(1)
哈希表缺点:
1)用户存储数据往往是无序的,因此存储数据时有风险,后来插入的数据可能会覆盖原来的数据
2)二维数组可以防覆盖,但是数组的大小在创建的时候已经固定,因此同一列插入的数据有限,虽然可以进行数组的扩容,但是会出现大量空间闲置的情况,是对内存区域极大的浪费

—3—>链表: 解决多个数据计算得到的位置相同的情况
链表缺点:
1)链表如果过长,查询的时候时间复杂度是O(n),没有起到降低时间复杂度的效果
2)当·链表长度过长的时候,需要把链表变成一棵树
在这里插入图片描述

—4—>有序二叉树:
1)对于这棵有序二叉树,查询的时间复杂度为O(logn)
例如:如果要查询6,6和10比较,6比10小,则右边的树肯定比6大、可以放弃查找,因此向左查找(这样相当于省去了查找一半的数据);6再和5比较,6比5大,则向右查找,放弃5左边的数据;
从上述过程可知,每次查找都相当于放弃了一半的数据,因此查询的时间复杂度为O(logn)
在这里插入图片描述

2)但是并不是所有有序二叉树的查询时间复杂度都是O(logn)
有序二叉树特点:左子树节点小于父节点,右子树节点大于父节点
例如:将下列数组构建成有序二叉树可得
在这里插入图片描述

由此可知,有序二叉树的查询时间复杂度并不严格为O(logn),而是在O(logn)和O(n)之间,所以有序二叉树的查询不稳定
如何让查询时间复杂度变稳定??——>平衡二叉树
—5—>平衡二叉树:
平衡二叉树是在有序二叉树的基础之上得来的

平衡二叉树

平衡二叉树特点:一个节点的左右子树的高度差的绝对值不超过1

旋转策略

如果插入的数据使某一结点左右子树的高度差超过了1,那么就造成了不平衡,——>通过LL、RR、LR、RL四种旋转策略保证树的平衡

假设:插入的节点为造成不平衡的节点(红色C),当前不平衡的节点(绿色A)

方法:从当前不平衡的节点(绿色A)向造成不平衡的节点(红色C)走两步

1、LL型旋转:

两步都是向左走,则为LL型旋转
1)将A的左子树升为新的根节点;
2)将原来的根节点A降为B的右子树;
3)各个子树(C)按大小关系进行排序(相当于子树重新构建一遍)。
在这里插入图片描述
在这里插入图片描述

2、RR型旋转:

两步都是向右走,则为RR型旋转
1)将A的右子树升为新的根节点;
2)将原来的根节点A降为B的左子树;
3)各个子树(C)按大小关系进行排序(相当于子树重新构建一遍)。
在这里插入图片描述
在这里插入图片描述

3、LR型旋转:

两步是先向左走,再向右走
1)先让后两个整体旋转,形成需要LL型旋转的局面
2)再进行LL型旋转
在这里插入图片描述
在这里插入图片描述

4、RL型旋转:

两步是先向右走,再向左走
1)先让后两个整体旋转,形成需要RR型旋转的局面
2)再进行RR型旋转
在这里插入图片描述
在这里插入图片描述

补充:

1)如果树中不止一个节点不平衡,选择离造成不平衡节点(红色)最近的节点;
2)将数组转化成平衡二叉树时,插入某一个节点后造成不平衡,则先将树旋转平衡后再插入后面的数据;
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/62680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL学习笔记(十二)锁

1.锁的类型 InnoDB实现了如下两种标准的行级锁: 共享锁(S Lock):允许事务对一条行数据进行读取 排他锁(X Lock):允许事务对一条行数据进行删除或更新 如果一个事务T1已经获得了行r的共享锁&…

委派设计模式

一、委派模式 1、定义 委派模式(Delegate Pattern)又称作委托模式,是一种面相对性的设计模式,允许对象组合实现与继承相同的代码重用,属于行为型设计模式,不属于GoF的23种设计模式。 委派模式的基本作用是…

Unity与IOS⭐一、百度语音IOS版Demo调试方法

文章目录 🟥 SDK下载与配置官网包名1️⃣ SDK下载地址2️⃣ 配置官网的包名3️⃣ 百度语音IOS版教程地址🟧 配置SDK Demo1️⃣ 配置License2️⃣ 配置唤醒词文件3️⃣ 打包🟨 Demo测试🟥 SDK下载与配置官网包名 1️⃣ SDK下载地址 SDK下载地址:https://ai.baidu.com…

JAVA中如何精确取到时间间隔

文章目录0 写在前面1 使用方法2 举例3 写在最后0 写在前面 做业务的时候,总要统计数据,几月份到几月份的全部数据。这个时候就要找到起始月份的具体时间和终止月份的具体时间。 此时我们用原始的Date类去处理就比较麻烦,可以自己写一个工具类…

jsp网络申报审批系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 网络申报审批系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用…

[矩阵论] Unit 1. 线性空间与线性变换 - 知识点整理

注: 以下内容均由个人整理, 不保证完全准确, 如有纰漏, 欢迎交流讨论参考: 杨明, 刘先忠. 矩阵论(第二版)[M]. 武汉: 华中科技大学出版社, 2005 1 线性空间与线性变换 1.1 线性空间 线性空间 Def 1.1: 设 VVV 是一个非空集合(V≠∅V\neq \varnothingV​∅),FF…

Unity与IOS⭐最基础的交互演示

文章目录 🟥 本章的交互效果🟧 创建IOS代码1️⃣ 创建代码文件2️⃣ 代码文件🚩 Interaction.h🚩 Interaction.m🟨 测试试试吧🟥 本章的交互效果 本章演示unity调用IOS代码,IOS并返回值。 🟧 创建IOS代码 我们的Unity代码一个脚本就好了,而IOS代码需要两个脚…

【AI】Python 实现 KNN 手写数字识别

KNN 算法 1. 题目介绍 K近邻(K-Nearest Neighbor, KNN)是一种最经典和最简单的有监督学习方法之一。K-近邻算法是最简单的分类器,没有显式的学习过程或训练过程,是懒惰学习(Lazy Learning)。当对数据的分…

如何搭建一个自己的音乐服务器 审核中

点赞再看,动力无限。 微信搜「 程序猿阿朗 」。 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章。 最近发现,经常用的网易云音乐,有很多歌曲下架了,能听的越来越少了;…

设计模式之中介者模式(十五)

目录 1. 背景 1.1 智能家庭管理项目 1.2 中介者模式概述 2. 中介者模式 2.1 中介者模式解决上述问题 1. 背景 1.1 智能家庭管理项目 智能家庭项目: 智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘 等。主人要看电视时,各个设备可以协…

7 支持向量机

支持向量机 支持向量机(SVM)是在统计学习理论基础上发展起来的一种数据挖掘方法,1992 年由Boser, Guyon和Vapnik提出,在解决小样本、非线性、高维的回归和分类问题上, 有许多优势。 1 支持向量分类概述 支持向量分类以训练样本集为数据对象…

支持向量机核技巧:10个常用的核函数总结

支持向量机是一种监督学习技术,主要用于分类,也可用于回归。它的关键概念是算法搜索最佳的可用于基于标记数据(训练数据)对新数据点进行分类的超平面。 一般情况下算法试图学习一个类的最常见特征(区分一个类与另一个类的特征),分类是基于学…

[附源码]JAVA毕业设计律师事务所网站(系统+LW)

[附源码]JAVA毕业设计律师事务所网站(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术&a…

ubuntu20.04安装anaconda3搭建python环境

1.清华源下载anaconda3 清华源anaconda软件镜像网站: Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载完成在终端打开Downloads 运行 bash Anaconda3-5.3.1-Linux-x86_64.sh 进入到下载页面 紧接着你可以使用conda --…

HTTP抓包神器---Fiddler

今天我们介绍一个好用的抓包工具.是针对于HTTP协议的抓包工具. Fiddler 下载地址 下载工具当然是要去官网下载啦. 这里为了防止有些人在网上找不到下载路径.我们直接把下载路径放在下面. https://www.telerik.com/download/fiddler 下载 点击上述链接以后会直接跳转到下…

蓝海创意云·11月大事记 || 12月,暖心相伴

秋尽冬生,日短天寒 告别了立冬与小雪 时光不紧不慢开启了新一月的篇章 万物冬藏,沉淀酝酿 站在十二月的路口 蛰伏打磨,静待厚积而薄发 导 读 ● 客户端更新:新增PSD通道合成选项 ● 渲染案例:绝代双骄重启江湖…

K8S - Pod 的概念和简介

1. POD的基本概念 Pod 是K8s 系统中可以创建(部署)和管理的最小单元。 Pod 里面可以包含多个容器(多实例),是一组容器的集合。 也就是讲K8S 不会直接管理容器 1个POD中的容器共享网络命名空间(共享ip) P…

MongoDB_前期准备(一)

目录一、数据库(Database)数据库分类1、关系型数据库(RDBMS)2、非关系型数据库(No SQL)二、MongoDB简介1)MongoDB VS MySql2)MongoDB中的三个概念3) MongoDB安装一、数据…

Reading Note(10)——AutoBridge

这篇论文是FPGA 2021年的best paper award,主要解决的是在HLS编译过程中优化布局和布线,最终达到整个multi-die的FPGA板上的大规模HLS设计时钟频率尽可能提升的目的,这篇工作在当前chiplet工艺铺展开来的当下更加有现实意义,通过这…

代码随想录训练营第41天|LeetCode 343. 整数拆分、 96.不同的二叉搜索树

参考 代码随想录 题目一&#xff1a;LeetCode 343.整数拆分 确定dp数组及其下标的含义 dp[i]为整数i拆分后得到的最大化乘积。确定递推公式 dp[i]可以有两种方式得到&#xff1a; dp[i] j * (i-j)&#xff0c;即只拆分成两个数&#xff0c;其中1 < j < i/2&#xff…