我一直在阅读红黑树,并且有两个关于他们的问题一直困扰着我。我还在了解他们,如果对于经验更丰富的编码员来说这是显而易见的,那就很抱歉。
如果将节点插入红黑树,平衡树,然后删除节点,是否会生成同一棵树?总是这样吗?在我看来它确实如此,但我并不完全确定。
如果删除没有子节点的红色节点,请平衡树,然后重新插入同一节点,始终生成同一个树?总是,有时,或从不?
再次,抱歉,如果有微不足道的话,我还在学习,并且没有找到这些问题的好答案。提前谢谢!
答案 0 :(得分:0)
第一个问题的答案是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
的父级始终是{{ 1}}当我们再次添加红色节点时,它会占用相同的位置。
以下是可视化工具的链接,可帮助您解决更多疑虑:https://www.cs.usfca.edu/~galles/visualization/RedBlack.html