红黑树

数据结构之红黑树

  • AVL树 (平衡二叉树) 最大作用就是查找,AVL树的查找、插入和删除在平均和最坏情况下都是O(logn)。
  • 如果在AVL树中插入或删除节点后,使得平衡因子大于1。此时,AVL树的平衡状态就被破坏,为了让它重新维持在一个平衡状态,就需要对其进行旋转处理, 那么创建一颗平衡二叉树的成本其实不小。
  • 红黑树同样以平衡、高效的随机访问著称,节点数量越多,效率越高。

AVL树与红黑树

  • AVL树的时间复杂度虽然优于红黑树,但是对于现在的计算机,可以忽略性能差异
  • 红黑树的插入删除比AVL树更便于控制操作
  • 红黑树整体性能略优于AVL树(红黑树旋转情况少于AVL树,不超过3次)

红黑树

红黑树是一棵二叉搜索树,它在每个节点增加了一个存储位记录节点的颜色,可以是RED,也可以是BLACK;通过任意一条从根到叶子简单路径上颜色的约束,红黑树保证最长路径不超过最短路径的二倍,因而近似平衡。

  • 每个节点颜色不是黑色,就是红色
  • 根节点是黑色的
  • 每个叶结点(为null的结点)都是黑色的
  • 如果一个节点是红色,那么它的两个子节点就是黑色的(没有连续的红节点)
  • 对于每个节点,从该节点到其后代叶节点的简单路径上,均包含相同数目的黑色节点
    在这里插入图片描述
    如上最段路径上全是黑结点,长路径保持相同数量黑结点,其长度小于短路径的2倍。

操作:

  1. 左旋:
    在这里插入图片描述
  2. 右旋:在这里插入图片描述
  3. 变色:结点的颜色由红变黑或由黑变红。

查找

红黑树总保持黑色完美平衡,所以它的查找最坏时间复杂度为O(2logN),也即整颗树刚好红黑相隔的时候。

红黑树的插入

按照二叉搜索树的方法进行节点插入,在插入新节点后根据情况进行颜色调整。

具体步骤:

  1. 根节点为NULL,直接插入新节点并将其颜色置为黑色
  2. 根节点不为NULL,找到要插入新节点的位置
  3. 插入新节点
  4. 判断新插入节点对全树颜色的影响,更新调整颜色
  • 如果插入黑节点,这个可以直接插入无论它的父亲是什么颜色,但是红黑树的性质是每条路径的黑色节点数目相同,其他路径的黑色节点数目一定比你现在少一个节点,所以调整起来是非常繁琐的。

  • 插入红节点不需要调整其他路径,如果它的父亲为黑,那么直接插入,如果他的父亲为红那么在该路径上面开始分情况调整.
    所以插入节点默认颜色一定要为红。

接下来开始插入节点:
如果插入节点的父亲为黑那么直接插入后返回不需要做任何调整.。但是如果插入节点的父亲为红,就需要进行调整。

1.插入结点的父结点为红结点,叔叔结点存在并且为红结点

在这里插入图片描述
在这里插入图片描述
继续做插入操作自平衡处理,直到平衡为止。(唯一会增加红黑树黑色结点层数的插入情景。)

参考链接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值