红黑树的部分易懂内容

严重参考:http://blog.csdn.net/v_july_v/article/details/6105630

红黑树的定义 及性质

是一种二叉搜索树,有序的 ,做的改进是 对节点添加了 颜色分层 red  或者 black 的特性,红黑平衡,保持了红黑树lgN高度。为了保证二叉树的高度,保证搜索、删除、插入的 时间复杂度为 lgN.

性质:

  1. 每个节点颜色 非黑即红;
  2. 根节点为黑色;
  3. 每个叶子节点都是黑色(这里的叶子节点指:树尾端的NIL指针(Null节点)不包含数据只充当书再次结束的指示
  4. 如果节点为红色,那么它的2个子节点为黑色【并没有说一定要一层黑+一层红】
  5. 对于根节点,到叶节点树尾端NIL指针的每条路径 包含相同数目的黑节点。

关于树的旋转(红黑树在节点插入、删除时容易改变红黑性质,所以要对树进行旋转操作以及对节点重新着色的操作恢复其性质)

【记忆技巧】本着变化移动最小的原则

  1. pivot-Y-c一脉相承(宗亲),把分家(Y的左子树)变异,作为pivot的右子树,
  2. 把Y宗亲带着c节点辈分提升,作为pivot的子节点,因着移动最小原则,pivot子树只能放在Y的另一支。
  3. 左旋完成
右旋同理;


删除二叉搜索树的节点:

  1. 该节点没有儿子,为叶子节点,直接删除;
  2. 只有一个子节点,那么子节点替换就可以;
  3. 有两个子节点,或者说左右子树,一般习惯用左子树的最大元素替换(顺着左儿子一直搜索右子树即可),或者用右子树的最小元素替换。

红黑树的删除与修复:

  1. 删除节点是红色,那么红黑树性质不变(关注性质4)

     2.删除节点是黑色,那么可能改变,要修正,

        (1)若被删节点不是父节点该边子树的唯一节点,那么性质5遭破坏,比如上图,删除 25号节点,那么这一支到各个叶子节点null的黑节点数会变化。

        (2)若被删节点唯一非空子节点为红色(删除后要继位的唯一选择),由于被删黑节点的父节点一定是红色(性质4),那么性质4被破坏,红的子也变红了。

        (3)若被删节点是根节点,而它的唯一非空节点是红色,那么根节点变红,性质2被破坏。

        (4)其他的情况,比如被删根节点,它的子节点都为黑色,那么???没懂性质5

我们认为,顶上去替代的节点可有双重颜色。本身色+固有继承色(黑色),那么有

红+黑:直接涂染成黑色,一键恢复;

黑+黑组合:且是根节点,什么不用做,无条件满血复活;

但是,如果以下几种复杂的情况:

(1)黑+黑,且,兄弟节点为红色(可知父节点和兄弟节点的子节点分为黑)

(2)黑+黑,且,兄弟为黑色,且,兄弟节点的两个子节点也为黑色

(3)黑+黑,且,兄弟节点为黑色,兄弟的左子为红色,右子为黑色

(4)黑+黑,且,兄弟节点是黑色,兄弟的右子为红色,左子的颜色任意

针对恢复:

(1)父节点染红,兄弟染黑,并且左旋,问题转化为(2)


(2)把当前节点和兄弟节点中抽取一重黑色(???)追加到父节点上,把父节点当成新的当前节点,重新进入算法。


(3)把兄弟结点染红,兄弟左子节点染黑,之后再在兄弟节点为支点解右旋,之后重新进入算法。此是把当前的情况转化为情况4,而性质5得以保持,


(4)把兄弟节点染成当前节点父节点的颜色,把当前节点父节点染成黑色,兄弟节点右子染成黑色,之后以当前节点的父节点为支点进行左旋,此时算法结束,红黑树所有性质调整正确,



二叉搜索树的插入:

与根节点比较,已存在,不插入;<根节点,与根节点左子树比较;>跟节点与根节点右子树比较,直到左子树或者右子树为空,则插入到空位置。

红黑树暂时不考虑吧,太复杂。基本情况:

(a)插入根节点,如果是红色,则变黑;如果是黑色,不变 

b.(1)插入修复情况1:如果当前结点的父结点是红色且祖父结点的另一个子结点(叔叔结点)是红色

 (2)插入修复情况2:当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的右子

 (3)插入修复情况3:当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的左子





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值