algorithm - 红黑树的性质

标签 algorithm red-black-tree

红黑树的性质:

  1. 每个节点要么是红色要么是黑色。
  2. 根是黑色的。
  3. 每片叶子 (NIL) 都是黑色的。
  4. 如果一个节点是红色的,那么它的两个 child 都是黑色的。
  5. 对于每个节点,从该节点到后代叶子的所有简单路径都包含相同数量的黑色节点。

根据属性,这些红黑树是有效的还是无效的?

一个。 enter image description here

我认为这是有效的


B. enter image description here

我认为这是有效的,但我不确定,因为有两个相邻的红色节点?


C. enter image description here

我认为这是有效的,但我不确定,因为有两个相邻的红色节点?


D. enter image description here

我认为这是无效的,因为它违反了属性 4?


我是否理解 RBtree 的这些属性?如果不是,我哪里错了?

最佳答案

您已正确列出红黑树的属性。四棵树中只有 C 不是有效的红黑树:

A. enter image description here

这是一棵有效的树。 Wikipedia确认:

every perfect binary tree that consists only of black nodes is a red–black tree.


B. enter image description here

I think this is valid, but I am not sure since there two adjacent red nodes?

有效。红色节点是兄弟节点是没有问题的。他们只是不应该处于亲子关系中。


C. enter image description here

I think this is valid, but I am not sure since there two adjacent red nodes?

这是无效的。不是因为相邻的红色节点,而是因为属性 5。标签为 12 的节点有路径到其具有不同数量黑色节点的叶子。节点 25 也是如此。

作为一般规则,一个红色节点永远不可能只有一个 NIL-leaf 作为子节点。它的 child 要么都是 NIL-leaves,要么都是(黑色)内部节点。这是从属性得出的。


D. enter image description here

I think this is not valid since it violate Property 4?

没有违反属性 4:红色节点的子节点是 NIL 叶子(此处未可视化),它们是黑色的。这些红色节点具有黑色 NIL 叶子作为 sibling 的事实是无关紧要的:没有关于 sibling 的规则。所以这是有效的。


有关结合树 C 和 D 特征的示例,请参阅 Wikipedia article 中描述的这棵有效树。 ,它也描绘了 NIL 叶子:

enter image description here

关于algorithm - 红黑树的性质,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69517818/

相关文章:

algorithm - 要求解决八皇后难题的算法

c++ - 按键和值排序的关联容器

c - 在 C 中的字符串中搜索最有效的内存方式

javascript - 我将输出作为二叉树的对象,如何将此对象值放入数组中以继续处理进一步的问题

algorithm - 查找数组中绝对差的 n 次方之和的最小数

c# - C#中红黑树的实现

algorithm - 插入红黑树

algorithm - 从 BST 树创建红黑树 - 最快的方法?

binary-search-tree - 红黑树最坏情况黑色高度的插入顺序

c++ - 红黑树重新平衡在树旋转时崩溃