算法导论中,红黑树删除操作中图 13.7 如何理解?

发布于 2022-09-01 12:09:17 字数 507 浏览 25 评论 0

在《算法导论》第三版红黑树这一章中,红黑树的删除操作,书中给了一个图 13.7 :

但是我发现似乎有一个问题,就是里面的 x 节点,在我自己的理解中,x 要么是一个红节点,要么是一个 NIL 的叶节点,而不是图 13.7 中的内部节点,理由如下:

如果 z 的儿子数小于 2,那么由于其某一个子树为空,所以其黑高度为 1 ,此时另一子树的黑高度也必为 1,所以 x 作为 y 的非空子树,要么为 NIL ,要么为红节点

如果 z 的儿子数等于 2,那么 y 是 z 的后继,而 y 的左子树必为空,所以其右子树的黑高度必为 1,所以 x 作为 y 的右子树,要么为 NIL,要么为红节点

我觉得我的理解应该是没有错的,但是跟书中的图不符合,我不知道是不是我理解错了还是什么地方被我忽略了?

麻烦大家了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

〗斷ホ乔殘χμё〖 2022-09-08 12:09:17

首先,z的儿子数小于等于2的情况是可以那么理解的。但是,为什么z的儿子数九一定小于等于2?

注意到delete操作中有一步:

else
  {
    y=TREE_MINIMUM(z->right);
    y_original_color=y->color;
    //其余部分
    RB_transplant(y,y->right);
    RB_transplant(z,y);
  }

这一步完成了移植,其中,子树的情况很可能是这样的:
图片描述

这个时候执行transplant之后y就变成内节点了啊~

图中的颜色我随便画的,实际上必须满足红黑树的性质。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文