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为例,
以图中方框处递归调用为分界点,它之前的代码就是自顶向下,它之后的代码就是自底向上


浙公网安备 33010602011771号