AVL(平衡二叉搜索)树学习笔记

AVL=BBST

一. 平衡因子

     平衡因子 = 节点的左子树高度 – 右子树高度

《AVL(平衡二叉搜索)树学习笔记》

如图:节点2的平衡因子为1-0=1

          节点11的平衡因子为2-1=1

          其他同理

总结:所谓AVL树就是其中所有节点的平衡因子不超过1也不小于-1。

二. AVL=适度平衡

1.一棵规模为n的AVL树,高度不超过O(logn)

     《AVL(平衡二叉搜索)树学习笔记》

 

2. 补充知识点:

斐波那契数列:Fibonacci Sequence

0,1,1,2,3,5,8,13,21,34,55,……

fib(n) = fib(n-1)+fib(n-2)   前一项+前两项(n>2)

fib(3) = fib(2)+fib(1)=1+0=1

3. 高度为h的AVL树,至少包含S(h)=fib(h+3)-1个节点。

三. 插入:

1. 单旋

  • 同时可有多个失衡节点,最低者g不低于x祖父
  • g经单旋调整后复横,子树高度复原;更高祖父也必平衡,全树复横

栗子:…………………………………………………………………………………………………………….

《AVL(平衡二叉搜索)树学习笔记》

栗子:…………………………………………………………………………………………………………….

《AVL(平衡二叉搜索)树学习笔记》

往T2或T2下插入一个节点,使得g的平衡因子由-1变成-2。从g出发,找到它的孩子节点p,孙子节点v。

《AVL(平衡二叉搜索)树学习笔记》                              

(1)引入一个临时的引用rc,指向节点p

(2)p的左子树T1成为g的右子树

(3)g成为p的左孩子

(4)p替换g成为局部子树的根

 《AVL(平衡二叉搜索)树学习笔记》

做了一次zag旋转,这种旋转只涉及到局部的常数个节点,所对应的时间消耗为O(1)。

2. 双旋

  • 同时可有多个失衡节点,最低者g不低于x祖父
  • g经单旋调整后复横,子树高度复原;更高祖父也必平衡,全树复横

《AVL(平衡二叉搜索)树学习笔记》

《AVL(平衡二叉搜索)树学习笔记》                 《AVL(平衡二叉搜索)树学习笔记》

栗子:…………………………………………………………………………………………………………….

插入单词:cup ,cop, copy, hit, hi, his 和 hia 后得到的 AVL 树

《AVL(平衡二叉搜索)树学习笔记》    《AVL(平衡二叉搜索)树学习笔记》

《AVL(平衡二叉搜索)树学习笔记》        《AVL(平衡二叉搜索)树学习笔记》

《AVL(平衡二叉搜索)树学习笔记》    《AVL(平衡二叉搜索)树学习笔记》

四. 删除

1. 单旋

  • 同时至多一个失衡节点g,首个可能就是x的父亲
  • g经单旋调整后复衡,子树高度未必复原;更高祖先仍可能失衡
  • 因有失衡传播现象,可能需要做O(logn)次调整

      《AVL(平衡二叉搜索)树学习笔记》

删除一个节点后,g处于失衡状态。进行一次顺时针的zig(g)

《AVL(平衡二叉搜索)树学习笔记》

2. 双旋

《AVL(平衡二叉搜索)树学习笔记》

删除一个节点后,g处于失衡状态。进行一次逆时针的zag(p),在进行一次顺时针的zig(p)。

栗子:…………………………………………………………………………………………………………….

《AVL(平衡二叉搜索)树学习笔记》

《AVL(平衡二叉搜索)树学习笔记》

《AVL(平衡二叉搜索)树学习笔记》

《AVL(平衡二叉搜索)树学习笔记》

五.(3+4)重构

《AVL(平衡二叉搜索)树学习笔记》

无论插入还是删除,无论是单旋还是双旋,最终效果应该都是这样一种形式。

 

 

 

 

 

 

 

 

 

    原文作者:平衡二叉树
    原文地址: https://blog.csdn.net/wydyd110/article/details/79413097
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞