• 平衡二叉树的手动调整方法


    看书左旋右旋看着懵逼,不懂往左旋转往右旋转到底是怎么个旋转法。

    总结了一个万能的手动调整方法,不用记忆什么LL,LR,RL,RR的形式,通吃。

     

    当新插入一个节点,导致不平衡,进行手动调整。

    步骤有四步:

    1。找到最小不平衡子树(和其根节点)

    2。从根节点出发,沿插入路径找三个节点

    3。调整这三个节点。(找出中位数,让中位数作为根节点,其余两个一左一右)

    4。剩下的节点,左右子树的位置保持不变,再找到最后一个节点的插入位置。

     

    (1)先以三个节点的情况演示,假设插入了15,3,7,出现不平衡。

     

     

     

     

     

     

     

     

    最小不平衡子树就是三个节点。找出中位数7,作为根节点。然后3放到左边,15放到右边。调整完成。

    (2)继续插入10和9,导致不平衡。

    最小不平衡子树如图所示。从根节点出发找到三个节点。

    调整这三个节点的位置,方法和上面一样,把中位数10作为根节点。

    (3)继续插入8导致不平衡,以及最小不平衡子树。

    7是根节点。从7开始,找到7,10,9三个节点。调整这三个。

     

    让9做根节点,7在左,10在右。

    对于剩下的节点,左右子树位置保持不变。3仍然在最左,15仍然在最右。

    然后再找到8应该插在哪里就行了。调整完成。

     

    复述一遍方法:

    1。找到最小不平衡子树(和其根节点)

    2。从根节点出发,沿插入路径找三个节点。

    3。调整这三个节点。(找出中位数,让中位数作为根节点,其余两个一左一右)

    4。剩下的节点,左右子树的位置保持不变,再找到最后一个节点的插入位置。

     

    这套方法万能,不用记书上的四种样式。

     

  • 相关阅读:
    详解SQL Server的两个存储过程:sp_MSforeachtable/sp_MSforeachdb
    使用WorkService创建定时任务
    Mahout下个性化推荐引擎Taste介绍
    Apache Mahout中的机器学习算法集
    内网信息收集笔记 楼下的小可怜
    关于linux的suid提权 楼下的小可怜
    Cobalt Strike初探 楼下的小可怜
    Google hacking 楼下的小可怜
    Git和Repo扫盲——如何取得Android源代码 zt
    Howto find native code memory leak in Android
  • 原文地址:https://www.cnblogs.com/banmei-brandy/p/13608479.html
Copyright © 2020-2023  润新知