树--AVL平衡树

1、AVL平衡树

       AVL 平衡树是带有平衡条件的二叉查找树。保证树的深度深度是O(logN),定义一个不平衡的节点的定义是,他的左右子树高度差是2.

       当插入一个节点之后,树可能不平衡,假设这个不平衡点是K1,造成这种不平衡的原因可能有以下四个情况:

        (1)对K1的左儿子的左子树进行插入。

         

        (2)对K1的左儿子的右子树进行插入。

    

        (3)对K1的右儿子的右子树进行插入。


        (4)对K1的右儿子的左子树进行插入。

        上述四种情况(1)(4)是镜像的,(2)(3)也是镜像的。因此理论上是四种情况,实际是两种,但是编程角度而言还是四种情况。平衡树的关键是理解如何保持树的平衡,也就是几个节点的指针之间的转换。也就是AVL平衡树中所说的旋转。自己将四种情况手动画出来,思考其中的指针变化。

        对于(1)(4)情况只需要执行一次单旋转即可实现树的平衡。对与(2)(3)则需要两次旋转。

        下面是代码实现:

        


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值