AVL和红黑树

二叉排序树见这儿
二叉排序树的一般操作的执行时间为O(logn)。但二叉排序树若退化成了一棵具有n个结点的线性链(即二叉排序树的高度为n)后,这些操作的最坏情况运行时间为O(n)。因此,需要尽可能地让二叉树保持平衡。

为了使二叉搜索树具有平衡性质,出现了AVL和红黑树。

为了获得较高的查找性能,AVL和红黑树都在进行插入和删除操作时通过特定操作保持二叉树查找树的平衡。

平衡二叉树(AVL)

平衡二叉树(AVL)以其发明者G. M. Adelson-Velskii和E. M. Landis命名。AVL树本质上还是一棵二叉排序树。

AVL可以看作时一棵带有平衡条件的二叉排序树:每个结点的左右子树高度之差的绝对值(平衡因子)最多为1。

红黑树

红黑树在二叉排序树的基础上增加了着色和相关的性质使得红黑树相对平衡,从而保证了红黑树的查找、插入、删除的时间复杂度最坏为O(logn)。

定义

每个结点或是红色的,或是黑色的;
根节点是黑色的;每个叶结点(NULL结点)都是黑色的;
如果一个结点是红色的,那么其孩子结点都是黑色的;
对于任意结点,其到叶节点NULL的每条路径都包含相同数目的黑结点。

关键性质

从根结点到叶结点的最长路径不超过最短的可能路径的两倍长。使得红黑树是大致平衡的。

基本操作

左旋

右旋

插入

任何一个即将插入的新结点的初始颜色都为红色。首先按照二叉排序树的插入操作插入新结点,并将新插入的结点置为红色。然后需要将整棵树调整为满足红黑树的性质。

分为以下几种情况:
1、 黑父
如果新插入结点的父结点为黑色,则插入一个红色结点不会影响红黑树的平衡,此时插入操作完成。
2、红父
若新插入结点的父结点为红色,需要一系列操作保证整棵树的红黑性质。可知,父结点为红色,祖父结点必为黑色。
2.1 红叔
若父结点的兄弟结点(叔父结点)为红色,无需进行旋转操作,只要将父结点和叔父结点变为黑色,将祖父结点变为红色,由于祖父结点的父结点有可能为红色,因此需要将祖父结点作为新的判定点重复上述操作进行平衡(此时又变成了父结点为红色的情况)。
2.2 黑叔
当叔父结点为黑色时,需要进行旋转,

参考资料:
[1] 史上最通俗易懂的关于二叉查找树、平衡二叉树、红黑树的关系讲解
[2] 经典数据结构-红黑树详解(红黑树的插入和删除)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值