LLRB 左倾红黑树(一)基础

1、RobertSedgewick左倾红黑树,与哪种树对应?2-3树?2-3-4树?2-3-4-5树?

  答:应该是2-3-4树。

    在树完全平衡的时候,树是一颗2-3树;

    但是在调用deleteMax的过程中(delete,deleteMin,insert应该是同理),可能会产生4-节点,5-节点;

    但在自顶向下的过程中,代码一直在维护树保持在2-3-4树;在自顶向下的过程中,对于变换产生的4-节点不处理,但若产生5-节点,则会进行分解;

    在自底向上的过程中,会把4-节点修复,最后是一颗2-3树,不会有4-节点。

 

2、RobertSedgewick左倾红黑树,对应的2-3-4树的节点有哪几种情形?

  2-节点不说

  3-节点,红链左倾

  

  4-节点,必须左右孩子红色

  

  错误的2-3-4的节点

  3-节点红链右倾,

  

  4-节点

  以下情况分别是

  a) isRed(h.left) && isRed(h.left.left)

  b) isRed(h.left) && isRed(h.left.right)

  c) isRed(h.right) && isRed(h.right.left)

  d) isRed(h.right) && isRed(h.right.right)

  

  重要说明,以上4种错误的4-节点,其中有两种会在左倾红黑树自顶向下的变色过程中出现,它们是a和c,但是在自底向上的过程中,又会修复红黑树,最后完全变成左倾红黑树且黑色平衡;b和d应该是永远不会出现

3、为什么RobertSedgewick左倾红黑树,其他情形的2-3-4红黑树是禁止的?

  答:pdf30页,

  

  左倾红黑树容易与2-3-4树,保持一一对应的关系。至于为什么容易保持一一对应的关系?不知道,原文没说。

 4、pdf和算法4红黑树一节中,反复提及的,自顶向下,自底向上是什么意思?

  左倾红黑树的deleteMax操作,deleteMin,insert,delete,都是递归操作;

  自顶向下,就是说,从根节点出发,找到目标节点前的所有经历过的代码;

  自底向上,就是说,找到目标节点后,从目标节点返回到根节点,经历过的代码;

  以deleteMax为例,

  以图中方框处递归调用为分界点,它之前的代码就是自顶向下,它之后的代码就是自底向上

  

 

posted @ 2019-03-09 16:51  leondryu  阅读(524)  评论(0)    收藏  举报