红黑树删除后的调整疑问
我可以对先直接color[w]=BLACK,然后对p[x]执行一次左旋,但为何书上面说要交换w和p[x]的颜色,然后再旋变成假设原来:经过x的子树黑高度为3,经过w的子树...
我可以对先直接 color[w] = BLACK,
然后对 p[x] 执行一次左旋,但为何书上面说要交换 w 和 p[x] 的颜色,然后再旋变成
假设原来:经过 x 的子树黑高度为 3,经过w 的子树黑高度为 2
删除后:经过 x 的子树黑高度为 2,经过w 的子树黑高度为 2,少了一个黑结点,违反性质 5)。(图 1)
所以我的解决办法是:增加经过 x 的子树黑高度(如图 2 所示), 只需先 color[w] = BLACK, 然后 Left-Rotate(p[x]) 即可达成。但为何《算法导论》和很多书上都说是先调换 w 和 p[x] 的颜色,然后再 Left-Rotate(p[x]),那也就是变成了下面的图 3,但是这样的话,经过 x 的子树黑高度还是为 2,根本就达不到效果,为何要做这样的旋转呢?请高手解答呀。小弟分不多,还望不吝赐教! 展开
然后对 p[x] 执行一次左旋,但为何书上面说要交换 w 和 p[x] 的颜色,然后再旋变成
假设原来:经过 x 的子树黑高度为 3,经过w 的子树黑高度为 2
删除后:经过 x 的子树黑高度为 2,经过w 的子树黑高度为 2,少了一个黑结点,违反性质 5)。(图 1)
所以我的解决办法是:增加经过 x 的子树黑高度(如图 2 所示), 只需先 color[w] = BLACK, 然后 Left-Rotate(p[x]) 即可达成。但为何《算法导论》和很多书上都说是先调换 w 和 p[x] 的颜色,然后再 Left-Rotate(p[x]),那也就是变成了下面的图 3,但是这样的话,经过 x 的子树黑高度还是为 2,根本就达不到效果,为何要做这样的旋转呢?请高手解答呀。小弟分不多,还望不吝赐教! 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询