有关红黑树删除的问题(Z有2个孩子)(固定前)
y = z;
int y_original_color = y->color;
if (z->left == TNULL) {
x = z->right;
rbTransplant(z, z->right);
} else if (z->right == TNULL) {
x = z->left;
rbTransplant(z, z->left);
} else {
y = minimum(z->right);
y_original_color = y->color;
x = y->right;
if (y->parent == z) {
x->parent = y; \\ [1] Local Class TNull
} else {
rbTransplant(y, y->right); \\ [2] Losing Y
y->right = z->right;
y->right->parent = y;
}
rbTransplant(z, y);
y->left = z->left;
y->left->parent = y;
y->color = z->color; \\ [3] Need of Recoloring
}
Questions
-
- 本地类tnull-(如果
y-> right
是tnull
),则TNULL是本地指针,简单地传递给x x
;x
的更改parent
也不更改本地tnull
? 的父。
- 本地类tnull-(如果
-
- 失去y-如果
z
的最低符号不是直接的孩子,则本节应执行。稍后将其放置在z
的位置。此段不仅只有Pivoty-> right/x
直到达到z
的位置,而不是y/minumim
?<?? /li>
- 失去y-如果
-
- 需要重新上色-IIRC,重新上色也会在以后的
fixdelete()
函数调用中发生,为什么需要此?
- 需要重新上色-IIRC,重新上色也会在以后的
请忍受我,我对这种事情很慢,我真的处于智慧。这是我第一次在这里问。谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在您的问题上
这就是y_original_color的目的。
On your questions
This is what y_original_color is for.