【问题标题】:Red-Black Tree clarification questions红黑树说明问题
【发布时间】:2016-07-15 01:28:09
【问题描述】:
我一直在阅读有关红黑树的信息,并且有两个关于它们的问题一直困扰着我。如果这些对于更有经验的编码人员来说是显而易见的,我仍在学习它们,非常抱歉。
如果将节点插入红黑树,平衡树,然后删除节点,是否会产生同一棵树?总是这样吗?在我看来确实如此,但我不完全确定。
如果删除一个没有子节点的红色节点,平衡树,然后重新插入相同的节点总是会产生相同的树?总是、有时还是从不?
再次,对不起,如果有琐碎,我还在学习,还没有找到这些问题的好答案。提前致谢!
【问题讨论】:
标签:
binary-tree
red-black-tree
【解决方案1】:
第一个问题的答案是no it does not lead to the same tree,下面我举了一个例子:
5(B) 5(B) 5(B)
/ \ Del(3) / \ Ins(3) / \
3(B) 9(B) =====> 4(B) 9(B) =====> 4(B) 9(B)
\ /
4(R) 3(R)
你可以看到树已经改变了。
第二个问题的答案是yes it always result in the same tree,因为当您删除red node that has no children 时,不会发生重新平衡,因为没有违反规则,因为red node 的父级始终是black node,当我们添加红色节点再次出现在同一个地方。
这是一个可视化工具的链接,可以帮助您消除更多疑虑:https://www.cs.usfca.edu/~galles/visualization/RedBlack.html