• 数据结构—平衡二叉树



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

    查询数据的时间复杂度

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

  • 相关阅读:
    【WinForm】关于截图识别数字并计算的桌面程序实现方案
    ZZ308 物联网应用与服务赛题第F套
    项目通用pom.xml文件模版
    【Java】Java 并发常考题
    数据治理:数据质量篇
    Oracle客户端版本安装
    详解CAN总线:CAN总线报文格式—错误帧
    [XSCTF]easyxor
    CSS(六)定位+元素的显示隐藏
    jmeter集成kafka测试
  • 原文地址:https://blog.csdn.net/weixin_53233197/article/details/128172981