手撕红黑树一变化规则

1、二叉搜索树

查找时间复杂度O(logn)

如果二叉查找树是平衡的也就是AVL平衡二叉搜索树n个节点的话高度就是Olog2(n+1),查找效率就是Olog2n近似于折半查找,如果二叉搜索树完全不平衡退化为查找效率On,所以对于二叉查找树其时间复杂度为ON-OLOG2N之间。

红黑树是一种特化的AVL树,必须满足二叉搜索树,根节点叶子节点必须为黑色,红黑树的平衡是一种相对平衡也就是维持黑色结点的平衡。

2、AVL插入删除比较麻烦?红黑树怎么解决的呢?

左旋右旋:https://blog.csdn.net/weixin_42269817/article/details/108991691

3、红黑树的三种变化变色左旋右旋

红黑树变化规则:

旋转和颜色变化规则:所有插入的点默认为红色

红黑树性质

  1. 结点必须是红色或者黑色。
  2. 根节点必须是黑色。
  3. 叶节点(NIL)必须是黑色(NIL节点无数据,是空节点)。
  4. 红色结点不能连续。
  5. 从任一节点出发到其每个叶子节点的路径,黑色节点的数量必须相等。

1、变色:当前结点父结点为红色,叔叔结点为红色

(1)把父结点设为黑色

(2)把叔叔结点设为黑色

(3)把爷爷设为红色
第一种: 当前节点的父节点是红色,且其祖父节点的另一个子节点(叔叔节点)也是红色,祖父节点不是根节点。    

(1)将父节点和叔叔节点设为黑色。

(2)将祖父节点设为红色。

(3)将祖父节点作为新的当前节点。
第二种:当前节点的父节点是红色叔叔节点也是红色,且当前节点在最边上(即每行最左边或最右边的节点),祖父节点是根节点。    

(1)将根节点作为新的当前节点,以根节点为支点进行左旋(插入的是右孩子)或者右旋(左孩子)。

(2)旋转后将新的根节点变黑色,其他节点根据需要变色,只要保证不出现红红连续节点即可。

(3)判断性质5是否已满足,不满足则以当前节点为支点进行一次左旋或右旋,旋转后依旧要保证不出现红红连续节点,否则进行变色。
第三种:其他所有情况,前提是当前节点的父节点是红色。    

(1)将父节点作为新的当前节点。

(2)以新的当前节点为支点进行左旋(插入的是右孩子)或者右旋(左孩子)。

第一步插入6

第二步

变色结束:

2、左旋:当前父节点是红色,叔叔结点是黑色,且当前结点是右子树,以父结点左旋

3、右旋:当前父结点红色,叔叔结点是黑色,且当前结点是左子树右旋。

(1)把父结点变为黑色(12黑)

(2)爷爷结点变为红色(19红)

(3)以爷爷结点旋转

插入完成》

右旋例子二:

叔叔是黑色,3在左边,右旋,4变黑,1变红,以1右旋

情况二:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值