AVL二叉查找树的性质及基本原理及插入操作

**

AVL树

**

性质

带有平衡条件的二叉查找树。
要求左右子树得高度相同,不强求树的深度要潜。空子树的高度为-1,只有具有(2^k)-1个节点的理想平衡树。
一颗AVL树是其中每个节点的左子树和右子树高度差最多差1的二叉查找树。
一颗AVL树的高度最多为1.44log(N+2)-1.328,但是实际上的高度只略大于log N
在高度为 h 的AVL树中,最少的节点数 S(h)=S(h-1)+S(h-2)+1 给出,对于h=0,S(h)=1;h=2 , S(h)=2.。斐波那契数。
除插入,假设惰性删除,所有的树操作都可以以时间O(log N) 执行。
插入可能会破坏平衡,需要考虑插入完前恢复平衡的性质。可以通过修正来做到,称其为旋转
把需要重新平衡的节点成为 α 。由于任意节点最多有两个儿子,因此出先高度不平衡就需要 α 点的两棵子树高度差二。
易得,只有四种情况。α 的左儿子的左子树,左儿子右子树,右儿子左子树,右儿子右子树。
1,4对称,2,3对称。
左左、右右( 即插入都靠外 )通过对树的一次单旋转。左右、右左( 插入靠内 )通过对树的双旋转。
单旋转
在这里插入图片描述
α 就是 节点 2,α作为新的根节点,因为2是4的左儿子,所以4变成2的右儿子。以前的根节点4变成了2的右儿子,左边肯定空出来,原来2节点的右子树就变成了4节点的左子树。
换个方式理解:不平衡是因为黄色比绿色深2层。那么,2 从儿子变成根,所以黄色框向上提了一层,4 从根变成了儿子 所以绿框向下降了一层。棕色框换了个父亲节点,所以没变。即 黄色-1,绿色+1,棕色不变。就重新平衡了。
双旋转
在这里插入图片描述
α 就是节点4。黄色比绿色深2。4作为新的根节点,左子树和右子树分别作为自己左儿子的右子树、右儿子的左子树。理由:4 是他父亲 2 的右儿子( 2<4 ),所以他父亲变成他的右儿子( 4>2 )。而 4 的子树肯定是比 他的父亲大的。所以 4 的左子树变成他父亲的右子树,即 4作为新的根节点,左子树作为自己左儿子的右子树 。啊同理推出 4 的右子树作为右儿子的左节点。
也可以理解为 α 上升 2 层,黄色上升 1 层 ,棕色不变,绿色下降 1 层。
注意,有拆分为局部的理念。比如
在这里插入图片描述

总结:将一个节点 N 插入到一颗 AVL树中,递归的将 N 插入到 T 中对应的子树 T1 中,如果插入之后 T1 的高度不变,则插入完成。( 存在插入过后,虽然子树 T1 高度发生了改变,但树 T 仍然是平衡的情况。比如 如图
在这里插入图片描述
),如果插入后 T 中有了不平衡则根据情况进行单旋转或者双旋转。

代码实现如下:https://blog.csdn.net/CDTU_stu1_2016_Lx/article/details/105411693

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值