Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tree 如何知道一棵树是否可以着色_Tree_Binary Tree_Binary Search Tree_Red Black Tree - Fatal编程技术网

Tree 如何知道一棵树是否可以着色

Tree 如何知道一棵树是否可以着色,tree,binary-tree,binary-search-tree,red-black-tree,Tree,Binary Tree,Binary Search Tree,Red Black Tree,我无法理解为什么下面的RB树是不可着色的。 我认为唯一的要求是: 从根到最远叶子的路径不超过从根到最近叶子路径的两倍 但在图像中,你可以看到最短路径(橙色)是2,最长路径(蓝色)是4,这意味着根据上述规则,它应该是可着色的。我想你不必计算零。这样,最短路径是1,最长路径是3,这意味着您引用的规则是适用的,因为从根到最近的叶的两倍路径是1*2,而3(实际最长路径)更大=>不可着色。实际上它是可着色的。红黑树必须始终遵守以下规则: 每个节点都有一种红色或黑色 树根总是黑色的 没有两个相邻的红色节

我无法理解为什么下面的RB树是不可着色的。

我认为唯一的要求是:

从根到最远叶子的路径不超过从根到最近叶子路径的两倍


但在图像中,你可以看到最短路径(橙色)是2,最长路径(蓝色)是4,这意味着根据上述规则,它应该是可着色的。

我想你不必计算零。这样,最短路径是1,最长路径是3,这意味着您引用的规则是适用的,因为从根到最近的叶的两倍路径是1*2,而3(实际最长路径)更大=>不可着色。

实际上它是可着色的。红黑树必须始终遵守以下规则:

  • 每个节点都有一种红色或黑色

  • 树根总是黑色的

  • 没有两个相邻的红色节点(红色节点不能有红色父节点或红色子节点)


  • 从根节点到空节点的每个路径都有相同数量的黑色节点

树不能着色,因为2-blue和3-blue都应该是红色,这违反了3规则

从根部到最远叶片的路径不超过 从根到最近的叶子的路径一样长

这并不完全是一个要求,而是RB树的一个通用属性。跳过数学证明,考虑一棵树上,在一个分支上,你只有黑色节点,而在另一个分支上,红色和黑色节点交替。在这种情况下,你有最大的不平衡,如果不是这样,至少有一个以上的规则被违反

理论上,RB树中有两种类型的高度:

  • 黑色高度,这是树中所有分支共有的高度(否则违反4规则)
  • “总高度”(不是现有术语),它是从根到零的单个路径上红色节点+黑色节点的最大数量

从根节点到空节点的每个路径都有相同数量的黑色节点-在您的示例中不遵守此规则。rootoops上有bh(1)和bh(2)。谢谢,我没有注意到