【发布时间】:2018-07-03 21:20:10
【问题描述】:
我不明白为什么下面的 RB 树是不可着色的。
我认为唯一的要求是:
从根到最远叶子的路径不超过从根到最近叶子的路径的两倍。
但是在图片中你可以看到最短路径(橙色)是2,最长路径(蓝色)是4,这意味着它应该按照上面的规则着色。
【问题讨论】:
标签: tree binary-tree binary-search-tree red-black-tree
我不明白为什么下面的 RB 树是不可着色的。
我认为唯一的要求是:
从根到最远叶子的路径不超过从根到最近叶子的路径的两倍。
但是在图片中你可以看到最短路径(橙色)是2,最长路径(蓝色)是4,这意味着它应该按照上面的规则着色。
【问题讨论】:
标签: tree binary-tree binary-search-tree red-black-tree
确实是可着色的。红黑树必须始终遵循以下规则:
每个节点都有红色或黑色。
树的根总是黑色的。
没有两个相邻的红色节点(红色节点不能有红色父节点或红色子节点)。
从根节点到 NULL 节点的每条路径都有相同数量的黑色节点。
树不能着色,因为 2-blue 和 3-blue 都应该是红色的,这违反了 3 规则。
从根到最远叶子的路径不超过两倍 只要从根到最近的叶子的路径。
这并不完全是一个要求,而是 RB 树的一个通用属性。跳过数学证明,考虑一棵树,其中一个分支上只有黑色节点,而在另一个分支上,红色和黑色节点交替出现。在这种情况下,如果不是这样,至少违反了上述规则中的一项,那么您就有最大的不平衡。
理论上,RB 树中有两种高度:
【讨论】:
我认为您不必计算 NIL。这样最短路径是 1,最长路径是 3,这意味着你引用的规则是适用的,因为从根到最近的叶子的路径的两倍是 1*2 和 3(实际最长的路径)更大 => 不是可着色。
【讨论】: