我不知道为什么我们需要NIL节点作为红黑树中的叶节点。谁能解释一下它的目的?
NIL 是一种特殊类型的节点,它表示其他树中的叶节点,如二叉搜索树和 AVL 树
NIL 节点有助于平衡黑色高度
当您删除节点时,黑色高度会立即传递给孩子,如果它没有孩子,它必须传递给某人......所以 NIL 节点对它有所帮助
当您插入新节点时,另一种方法nil节点可以帮助我们识别我们所面临的情况(红叔或黑叔(,有时叔叔会可以是NIL节点
红黑树不需要NIL节点。实际上,在该结构的典型实现中,完全省略了NIL节点以减少内存消耗。此外,我们可以更改红黑树的定义,以避免提及NIL节点,而不会丢失结构的任何基本特性:
将红黑树定义为具有以下附加属性的二叉搜索树:
- 每个节点都有一个红色或黑色的颜色属性。
- 如果黑色节点只有一个子节点,则该子节点必须是红色和叶子。
- 红色节点是一片叶子,或者有两个黑色子节点。
- 从根到叶的所有路径必须具有相同数量的黑色节点。
取任何具有NIL节点的红黑树,擦除NIL节点,它将满足上面的定义。反之,取一棵满足上述定义的树,将黑色的NIL节点放在每个少于两个子节点的非NIL节点下,这样它们就有两个子节点,根据标准定义,它将是一棵红黑树。