user-0 提问: 红黑树的一个小问题

回复:
user: user-0
content: 引用 8 楼 fly_dragon_fly 的回复:[quote=引用 6 楼 New_Vest 的回复:] [quote=引用 4 楼 fly_dragon_fly 的回复:] 你这图少了, 两个红结点在一起,显然是演示insert后的fixup, 1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少  这张图就是一张待调整的图，但是我不太明白你说的：“1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少”，能说一下123和45之间的区别么？为什么123是黑色，而45没有画黑色呢？[/quote] 看你引用英语应该来自算法导论, 图肯定不是,上面说的很清楚, 叶子节点(NIL) 就是黑色, 所以反过来,4,5不是叶子,把这些看成子树不就简单了, 图看得确实很奇怪, 直接看算法导论好了,那上面画得很清楚[/quote]  引用 8 楼 fly_dragon_fly 的回复:[quote=引用 6 楼 New_Vest 的回复:] [quote=引用 4 楼 fly_dragon_fly 的回复:] 你这图少了, 两个红结点在一起,显然是演示insert后的fixup, 1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少  这张图就是一张待调整的图，但是我不太明白你说的：“1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少”，能说一下123和45之间的区别么？为什么123是黑色，而45没有画黑色呢？[/quote] 看你引用英语应该来自算法导论, 图肯定不是,上面说的很清楚, 叶子节点(NIL) 就是黑色, 所以反过来,4,5不是叶子,把这些看成子树不就简单了, 图看得确实很奇怪, 直接看算法导论好了,那上面画得很清楚[/quote]  引用 8 楼 fly_dragon_fly 的回复:[quote=引用 6 楼 New_Vest 的回复:] [quote=引用 4 楼 fly_dragon_fly 的回复:] 你这图少了, 两个红结点在一起,显然是演示insert后的fixup, 1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少  这张图就是一张待调整的图，但是我不太明白你说的：“1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少”，能说一下123和45之间的区别么？为什么123是黑色，而45没有画黑色呢？[/quote] 看你引用英语应该来自算法导论, 图肯定不是,上面说的很清楚, 叶子节点(NIL) 就是黑色, 所以反过来,4,5不是叶子,把这些看成子树不就简单了, 图看得确实很奇怪, 直接看算法导论好了,那上面画得很清楚[/quote]  引用 8 楼 fly_dragon_fly 的回复:[quote=引用 6 楼 New_Vest 的回复:] [quote=引用 4 楼 fly_dragon_fly 的回复:] 你这图少了, 两个红结点在一起,显然是演示insert后的fixup, 1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少  这张图就是一张待调整的图，但是我不太明白你说的：“1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少”，能说一下123和45之间的区别么？为什么123是黑色，而45没有画黑色呢？[/quote] 看你引用英语应该来自算法导论, 图肯定不是,上面说的很清楚, 叶子节点(NIL) 就是黑色, 所以反过来,4,5不是叶子,把这些看成子树不就简单了, 图看得确实很奇怪, 直接看算法导论好了,那上面画得很清楚[/quote]  引用 8 楼 fly_dragon_fly 的回复:[quote=引用 6 楼 New_Vest 的回复:] [quote=引用 4 楼 fly_dragon_fly 的回复:] 你这图少了, 两个红结点在一起,显然是演示insert后的fixup, 1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少  这张图就是一张待调整的图，但是我不太明白你说的：“1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少”，能说一下123和45之间的区别么？为什么123是黑色，而45没有画黑色呢？[/quote] 看你引用英语应该来自算法导论, 图肯定不是,上面说的很清楚, 叶子节点(NIL) 就是黑色, 所以反过来,4,5不是叶子,把这些看成子树不就简单了, 图看得确实很奇怪, 直接看算法导论好了,那上面画得很清楚[/quote]  引用 8 楼 fly_dragon_fly 的回复:[quote=引用 6 楼 New_Vest 的回复:] [quote=引用 4 楼 fly_dragon_fly 的回复:] 你这图少了, 两个红结点在一起,显然是演示insert后的fixup, 1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少  这张图就是一张待调整的图，但是我不太明白你说的：“1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少”，能说一下123和45之间的区别么？为什么123是黑色，而45没有画黑色呢？[/quote] 看你引用英语应该来自算法导论, 图肯定不是,上面说的很清楚, 叶子节点(NIL) 就是黑色, 所以反过来,4,5不是叶子,把这些看成子树不就简单了, 图看得确实很奇怪, 直接看算法导论好了,那上面画得很清楚[/quote]  引用 8 楼 fly_dragon_fly 的回复:[quote=引用 6 楼 New_Vest 的回复:] [quote=引用 4 楼 fly_dragon_fly 的回复:] 你这图少了, 两个红结点在一起,显然是演示insert后的fixup, 1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少  这张图就是一张待调整的图，但是我不太明白你说的：“1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少”，能说一下123和45之间的区别么？为什么123是黑色，而45没有画黑色呢？[/quote] 看你引用英语应该来自算法导论, 图肯定不是,上面说的很清楚, 叶子节点(NIL) 就是黑色, 所以反过来,4,5不是叶子,把这些看成子树不就简单了, 图看得确实很奇怪, 直接看算法导论好了,那上面画得很清楚[/quote]  引用 8 楼 fly_dragon_fly 的回复:[quote=引用 6 楼 New_Vest 的回复:] [quote=引用 4 楼 fly_dragon_fly 的回复:] 你这图少了, 两个红结点在一起,显然是演示insert后的fixup, 1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少  这张图就是一张待调整的图，但是我不太明白你说的：“1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少”，能说一下123和45之间的区别么？为什么123是黑色，而45没有画黑色呢？[/quote] 看你引用英语应该来自算法导论, 图肯定不是,上面说的很清楚, 叶子节点(NIL) 就是黑色, 所以反过来,4,5不是叶子,把这些看成子树不就简单了, 图看得确实很奇怪, 直接看算法导论好了,那上面画得很清楚[/quote]  引用 8 楼 fly_dragon_fly 的回复:[quote=引用 6 楼 New_Vest 的回复:] [quote=引用 4 楼 fly_dragon_fly 的回复:] 你这图少了, 两个红结点在一起,显然是演示insert后的fixup, 1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少  这张图就是一张待调整的图，但是我不太明白你说的：“1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少”，能说一下123和45之间的区别么？为什么123是黑色，而45没有画黑色呢？[/quote] 看你引用英语应该来自算法导论, 图肯定不是,上面说的很清楚, 叶子节点(NIL) 就是黑色, 所以反过来,4,5不是叶子,把这些看成子树不就简单了, 图看得确实很奇怪, 直接看算法导论好了,那上面画得很清楚[/quote] 嗯，确实，把黑点理解成子树的根节点是black就解释通了。。。 正如   引用 7 楼 mxway 的回复:就这张图来说，如果这是一棵红黑树，那么P的左右子树(分别以1和2为根)一定不会为空，并且1,2节点还必须是黑色，这样才能保证以P为根结点子树到叶节点黑色节点等于以U为根节点到叶节点黑色节点数。如果1,2为空，就已经违反了红黑树性质，后面再做插入也就没有意义了。  引用 7 楼 mxway 的回复:就这张图来说，如果这是一棵红黑树，那么P的左右子树(分别以1和2为根)一定不会为空，并且1,2节点还必须是黑色，这样才能保证以P为根结点子树到叶节点黑色节点等于以U为根节点到叶节点黑色节点数。如果1,2为空，就已经违反了红黑树性质，后面再做插入也就没有意义了。  引用 7 楼 mxway 的回复:就这张图来说，如果这是一棵红黑树，那么P的左右子树(分别以1和2为根)一定不会为空，并且1,2节点还必须是黑色，这样才能保证以P为根结点子树到叶节点黑色节点等于以U为根节点到叶节点黑色节点数。如果1,2为空，就已经违反了红黑树性质，后面再做插入也就没有意义了。  引用 7 楼 mxway 的回复:就这张图来说，如果这是一棵红黑树，那么P的左右子树(分别以1和2为根)一定不会为空，并且1,2节点还必须是黑色，这样才能保证以P为根结点子树到叶节点黑色节点等于以U为根节点到叶节点黑色节点数。如果1,2为空，就已经违反了红黑树性质，后面再做插入也就没有意义了。  引用 7 楼 mxway 的回复:就这张图来说，如果这是一棵红黑树，那么P的左右子树(分别以1和2为根)一定不会为空，并且1,2节点还必须是黑色，这样才能保证以P为根结点子树到叶节点黑色节点等于以U为根节点到叶节点黑色节点数。如果1,2为空，就已经违反了红黑树性质，后面再做插入也就没有意义了。  引用 7 楼 mxway 的回复:就这张图来说，如果这是一棵红黑树，那么P的左右子树(分别以1和2为根)一定不会为空，并且1,2节点还必须是黑色，这样才能保证以P为根结点子树到叶节点黑色节点等于以U为根节点到叶节点黑色节点数。如果1,2为空，就已经违反了红黑树性质，后面再做插入也就没有意义了。  引用 7 楼 mxway 的回复:就这张图来说，如果这是一棵红黑树，那么P的左右子树(分别以1和2为根)一定不会为空，并且1,2节点还必须是黑色，这样才能保证以P为根结点子树到叶节点黑色节点等于以U为根节点到叶节点黑色节点数。如果1,2为空，就已经违反了红黑树性质，后面再做插入也就没有意义了。  引用 7 楼 mxway 的回复:就这张图来说，如果这是一棵红黑树，那么P的左右子树(分别以1和2为根)一定不会为空，并且1,2节点还必须是黑色，这样才能保证以P为根结点子树到叶节点黑色节点等于以U为根节点到叶节点黑色节点数。如果1,2为空，就已经违反了红黑树性质，后面再做插入也就没有意义了。  引用 7 楼 mxway 的回复:就这张图来说，如果这是一棵红黑树，那么P的左右子树(分别以1和2为根)一定不会为空，并且1,2节点还必须是黑色，这样才能保证以P为根结点子树到叶节点黑色节点等于以U为根节点到叶节点黑色节点数。如果1,2为空，就已经违反了红黑树性质，后面再做插入也就没有意义了。  说的那样。。。多谢，两位，已经差不多理解了！

user: user-1
content: 就这张图来说，如果这是一棵红黑树，那么P的左右子树(分别以1和2为根)一定不会为空，并且1,2节点还必须是黑色，这样才能保证以P为根结点子树到叶节点黑色节点等于以U为根节点到叶节点黑色节点数。如果1,2为空，就已经违反了红黑树性质，后面再做插入也就没有意义了。

user: user-0
content: 引用 4 楼 fly_dragon_fly 的回复:你这图少了, 两个红结点在一起,显然是演示insert后的fixup, 1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少  这张图就是一张待调整的图，但是我不太明白你说的：“1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少”，能说一下123和45之间的区别么？为什么123是黑色，而45没有画黑色呢？

user: user-0
content: 引用 2 楼 hnwyllmm 的回复:楼主说的这个是红黑树旋转前的状态吧，这明显不符合这一条规则： 如果一个结点是红的，则它的两个儿子都是黑的。也就是说在一条路径上不能出现相邻的两个红色结点。  叶子节点不一定是黑色的： 每个叶子结点都带有两个空的黑色结点（被称为黑哨兵），如果一个结点n的只有一个左孩子，那么n的右孩子是一个黑哨兵；如果结点n只有一个右孩子，那么n的左孩子是一个黑哨兵。  只是要求根节点一定是黑色的   引用 3 楼 mxway 的回复:红黑树所有的叶节点都是黑色节点。上图展示的是红黑树出现“不平衡”时的调整过程，没有画完。后面还需要一步以N为根节点的右旋操作，操作后就会出现平衡。    1.A node is either red or black. 2.The root is black. This rule is sometimes omitted. Since the root can always be changed from red to black, but not necessarily vice versa, this rule has little effect on analysis. 3.All leaves (NIL) are black. 4.If a node is red, then both its children are black. 5.Every path from a given node to any of its descendant NIL nodes contains the same number of black nodes. The uniform number of black nodes in the paths from root to leaves is called the black-height of the red–black tree.[14] 以上是维基百科上的给出的红黑树的五性质，第三条不是说叶子节点应该是黑色么， 上图中N节点是新插入节点，抛开这个节点，那么P节点的右孩子也是个叶子节点，是不是应该也是黑色呢？ 如下图， 但是不是说所有叶子节点是黑色么？那么4和5叶子节点为什么不是黑色，如果是黑色，肯定又违背性质5了啊？

user: user-2
content: 你这图少了, 两个红结点在一起,显然是演示insert后的fixup, 1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少

user: user-1
content: 红黑树所有的叶节点都是黑色节点。上图展示的是红黑树出现“不平衡”时的调整过程，没有画完。后面还需要一步以N为根节点的右旋操作，操作后就会出现平衡。

user: user-3
content: 楼主说的这个是红黑树旋转前的状态吧，这明显不符合这一条规则： 如果一个结点是红的，则它的两个儿子都是黑的。也就是说在一条路径上不能出现相邻的两个红色结点。  叶子节点不一定是黑色的： 每个叶子结点都带有两个空的黑色结点（被称为黑哨兵），如果一个结点n的只有一个左孩子，那么n的右孩子是一个黑哨兵；如果结点n只有一个右孩子，那么n的左孩子是一个黑哨兵。  只是要求根节点一定是黑色的

user: user-0
content: 要沉了吗、、、、、、

user: user-2
content: 引用 6 楼 New_Vest 的回复:[quote=引用 4 楼 fly_dragon_fly 的回复:] 你这图少了, 两个红结点在一起,显然是演示insert后的fixup, 1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少  这张图就是一张待调整的图，但是我不太明白你说的：“1,2,3,4,5都应该代表子树, 黑色代表子树的根是黑色,也就是无法知道黑高是多少”，能说一下123和45之间的区别么？为什么123是黑色，而45没有画黑色呢？[/quote] 看你引用英语应该来自算法导论, 图肯定不是,上面说的很清楚, 叶子节点(NIL) 就是黑色, 所以反过来,4,5不是叶子,把这些看成子树不就简单了, 图看得确实很奇怪, 直接看算法导论好了,那上面画得很清楚