数据结构—平衡二叉树
创始人
2024-03-18 23:42:51
0

文章目录

  • 查询数据的时间复杂度
  • 平衡二叉树
    • 旋转策略
      • 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)将数组转化成平衡二叉树时,插入某一个节点后造成不平衡,则先将树旋转平衡后再插入后面的数据;
在这里插入图片描述

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...