红黑树澄清问题

时间:2016-03-27 18:57:22

标签: binary-tree red-black-tree

我一直在阅读红黑树,并且有两个关于他们的问题一直困扰着我。我还在了解他们,如果对于经验更丰富的编码员来说这是显而易见的,那就很抱歉。

  1. 如果将节点插入红黑树,平衡树,然后删除节点,是否会生成同一棵树?总是这样吗?在我看来它确实如此,但我并不完全确定。

  2. 如果删除没有子节点的红色节点,请平衡树,然后重新插入同一节点,始终生成同一个树?总是,有时,或从不?

  3. 再次,抱歉,如果有微不足道的话,我还在学习,并且没有找到这些问题的好答案。提前谢谢!

1 个答案:

答案 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