zoukankan      html  css  js  c++  java
  • 二叉排序树/平衡二叉树

    (一)二叉排序树(BST)——P185

      特征:1.若左子树非空,则左子树上所有节点的值均小于根节点的值

            2.若右子树非空,则右子树上所有结点的值均大于根结点的值

         3.左、右子树也分别是一颗二叉排序树

    (二)平衡二叉树(AVL)——P186

      先求出最小不平衡子树,再根据最小不平衡子树根节点判断类型

      1.定义:任意节点的左右子树高度差的绝对值不超过1

      2.平衡因子:节点左子树与右子树的高度差为该节点的平衡因子

      3.平衡二叉树的插入:

        1)LL平衡旋转(在节点A的左孩子的左子树上插入新节点)——右单旋转

          1.将A的左孩子B向右上旋转代替A成为根节点

          2.将A节点向右下旋转成为B的右子树的根节点

          3.将B的原右子树作为A节点的左子树

     

          图1:插入节点67

     

        2)RR平衡旋转(在节点A的右孩子的右子树上插入新节点)——左单旋转

          1.将A的右孩子B向左上旋转代替A成为根节点

          2.将A节点向左下旋转成为B的左子树的根节点

                  3.将B的原左子树作为A节点的右子树 

     

                       图2:插入90

        3)LR平衡旋转(在节点A的左孩子的右子树上插入新节点)——先左旋后右旋

          1.将A节点的左孩子B的右子树的根节点C向左上旋转提升到B节点的位置

          2.将C节点向右上旋转提升到A节点的位置

                     图3:插入57

        4)RL平衡旋转(在节点A的右孩子的左子树上插入新节点)——先右旋后左旋

          1.将A节点的右孩子B的左子树的根节点C向右上旋转提升到B节点

          2.将C节点向左上旋转提升到A节点的位置

                       图4:插入63

  • 相关阅读:
    【BZOJ1492】【NOI2007】货币兑换(动态规划,CDQ分治,Splay)
    【CF311E】Biologist(网络流,最小割)
    【BZOJ1391】Order(网络流,最小割)
    【BZOJ2007】【NOI2010】海拔(最小割,平面图转对偶图,最短路)
    【BZOJ1001】狼抓兔子(平面图转对偶图,最短路)
    【BZOJ1458】【洛谷4311】士兵占领(网络流)
    【BZOJ2756】奇怪的游戏(二分,网络流)
    【BZOJ1143】祭祀(网络流)
    【BZOJ3504】危桥(网络流)
    【洛谷3852】小朋友(弦图)
  • 原文地址:https://www.cnblogs.com/-slz-2/p/13551161.html
Copyright © 2011-2022 走看看