为什么红黑树总是将零个节点作为叶节点,这意味着什么?

时间:2020-02-12 03:03:16

标签: data-structures red-black-tree

我不知道为什么我们需要NIL节点作为红黑树中的叶节点。谁能解释其目的?

2 个答案:

答案 0 :(得分:4)

NIL是一种特殊类型的节点,它指示其他树(例如二叉搜索树和AVL树)中的叶节点

NIL节点有助于平衡黑色高度

删除节点时,如果没有子节点,则黑色高度立即传递给子节点,因此必须传递某人...所以NIL节点对此有所帮助

插入新节点nil节点时的另一种方法可以帮助我们识别遇到的情况(红色叔叔或黑色叔叔),有时叔叔可以成为NIL节点

答案 1 :(得分:0)

红黑树不需要 NIL 节点。实际上,在该结构的典型实现中,完全省略了 NIL 节点以减少内存消耗。此外,我们可以改变红黑树的定义,以避免提及 NIL 节点,而不会失去结构的任何基本特性:

将红黑树定义为具有附加属性的二叉搜索树

  1. 每个节点都拥有一个颜色属性,它要么是红色,要么是黑色。
  2. 如果一个黑色节点只有一个子节点,那么这个子节点必须是红色和一片叶子。
  3. 红色节点要么是叶子节点,要么有两个黑色子节点。
  4. 从根到叶的所有路径必须具有相同数量的黑色节点。

取任何有 NIL 节点的红黑树,擦除 NIL 节点,它就会满足上面的定义。反之,取一棵满足上述定义的树,在每个子节点少于两个的非 NIL 节点下放置黑色 NIL 节点,这样它们就有两个子节点,按照标准定义,这将是一棵红黑树。