• 三步学会如何构建平衡二叉树(简单好理解)


    何为平衡二叉树?

    首先回顾一下,什么是平衡二叉树亦被称为AVL树,Adelson-Velskii and Landis)。平衡二叉树主要具有以下三个特点:
    1. 平衡二叉树首先要符合搜索二叉树的特点:即左子树的值比根节点小,右子树的值比根节点大;
    2. 左子树和右子树的高度之差的绝对值小于等于1
    3. 左子树和右子树也是平衡二叉树

    判断方法:左子树和右子树的高度差称为平衡因子(平衡因子=左子树高度-右子树高度),若平衡因子绝对值>1则该二叉树不平衡。

    当二叉树的子树间的高度相差太大时,其操作的时间复杂度会提高到O(n)。为了降低时间复杂度,需要对二叉树进行处理,形成平衡二叉树。

    构建平衡二叉树

    平衡二叉树的构建,可以通过以下三步来完成:
    1. 判断二叉树类型(LL, LR, RR, RL)

                    LL型                                LR型                    RL型                                             RR型

    先理解上面四种类型,如何变为平衡二叉树:
           首先:二叉树的平衡需要通过“左旋”“右旋”来处理可以把二叉树想象成一个搭在三角坡上的链条,其支撑点就是根节点(三个节点的中间值),左旋右旋都是在这个三角坡上进行处理。

    1)LL型(左型)需要“右旋”。看图理解:

    LL型右旋变为平衡二叉树

    2)LR型(左型)需要“右旋”。看图理解:

    LR型右旋变为平衡二叉树

     3)RR型、RL型与上述两方法一致,不再赘述。

     2. 找出不平衡的地方

    如果一个二叉树里混合了LR和RL等多种类型,可以优先从由根节点构成的不平衡二叉树开始处理。举两个例子说明:
     

           上面的不平衡二叉树中,红色部分是RL型,蓝色部分是LR型,但24、53、37是根节点,由它们构成的RL树更重要。而53、37、48构成的LR树中,48不是根节点,所以不处理(因为先处理了最重要的不平衡结构,后面的不平衡处都会随之解体)。该不平衡二叉树具体的平衡过程会在后文详细给出。

           上述二叉树中,红色部分是RR型,蓝色部分是RL型,其中2、4、5是根节点,由它们构成的RR树更重要,优先处理。而蓝色部分由2、4、3构成,3不是根节点,不处理。

     3. 旋转,直到得到平衡二叉树 

    原则:
    1. 先处理由根节点组成的不平衡树,后面的不平衡都会迎刃而解。
    2. 多余的右孩子要变成左孩子

    例1:

    例2:

    例3: 
    输入关键字序列(16,3,7,11 ,9,26,18,14,15)给出AVL树

  • 相关阅读:
    动环监控系统什么牌子好?动环监控有哪些厂家
    源码编译net-snmp
    uni-app监听页面滚动
    【已解决】Maven更改本地默认仓库时遇到的问题。 No implementation for org.apache.maven.model.path
    Yandex的直接流量来源
    day59
    Python+Appium+Pytest+Allure实战APP自动化测试框架,小试牛刀
    如何借助科技力量,高效驱动产业园运营效率新飞跃
    #力扣:2651. 计算列车到站时间@FDDLC
    mysql中自定义变量(浅显易懂简洁版)
  • 原文地址:https://blog.csdn.net/Leeeoplod/article/details/127859225