数据结构 平衡二叉树

搜索树节点的不同插入次序, 将导致不同的深度和平均查找长度ASL

数据结构 平衡二叉树_第1张图片

AVL平均查找次数:

avl(a) = (1 + 2x2 + 3x3 + 4x3 +5x2 + 6x1);  //平均查找长度


平衡树的概念:

平衡因子: BF(T) = 左子树的高度 - 右子树的高度

空树 或者左右两边的高度差绝对值不超过1

数据结构 平衡二叉树_第2张图片

比如这棵树 假设7为第0层 则左边的高度为3 右边的高度为1 高度差为 |3-1| = 2

设nh是高度为h的平衡二叉树的最小节点数


设nh是高度为h的平衡二叉树的最小节点数

给定节点数为n的AVL二叉树的最大高度为O(log2n)



平衡二叉树的调整:

数据结构 平衡二叉树_第3张图片

如上图,在插入一个新的节点后 二叉树不平横了 此时通过旋转操作 使二叉树重新恢复平衡

不平衡的"发现者"是Mar, "麻烦节点"Nov在发现者右子树的右边

因而叫RR操作

二叉树原本是平衡的 插入一个新元素后平衡被破坏了 此时需要旋转来调整

因为是右子树上的插入 因此右旋转


例子: RR旋转

数据结构 平衡二叉树_第4张图片

如上图: 原本二叉树是平衡的 在插入一个新元素15后 平衡被破坏

被破坏者是:5   破坏者是15

因此对5的右子树10进行旋转 旋转后效果如右图

(注:破坏者插在14的左右两边都可以进行旋转)


例子:LL旋转

数据结构 平衡二叉树_第5张图片

如上图:出现了两个被破环者 此时选择最下方的被破坏者 Mar

 对其进行左旋转 效果如右图






你可能感兴趣的:(数据结构与算法)