数据结构 平衡二叉树
搜索树节点的不同插入次序, 将导致不同的深度和平均查找长度ASL
AVL平均查找次数:
avl(a) = (1 + 2x2 + 3x3 + 4x3 +5x2 + 6x1); //平均查找长度
平衡树的概念:
平衡因子: BF(T) = 左子树的高度 - 右子树的高度
空树 或者左右两边的高度差绝对值不超过1
比如这棵树 假设7为第0层 则左边的高度为3 右边的高度为1 高度差为 |3-1| = 2
设nh是高度为h的平衡二叉树的最小节点数
设nh是高度为h的平衡二叉树的最小节点数
给定节点数为n的AVL二叉树的最大高度为O(log2n)
平衡二叉树的调整:
如上图,在插入一个新的节点后 二叉树不平横了 此时通过旋转操作 使二叉树重新恢复平衡
不平衡的"发现者"是Mar, "麻烦节点"Nov在发现者右子树的右边
因而叫RR操作
二叉树原本是平衡的 插入一个新元素后平衡被破坏了 此时需要旋转来调整
因为是右子树上的插入 因此右旋转
例子: RR旋转
如上图: 原本二叉树是平衡的 在插入一个新元素15后 平衡被破坏
被破坏者是:5 破坏者是15
因此对5的右子树10进行旋转 旋转后效果如右图
(注:破坏者插在14的左右两边都可以进行旋转)
例子:LL旋转
如上图:出现了两个被破环者 此时选择最下方的被破坏者 Mar
对其进行左旋转 效果如右图