gpt4 book ai didi

c - 为什么这个移植函数适用于二叉搜索树?

转载 作者:行者123 更新时间:2023-11-30 17:57:58 25 4
gpt4 key购买 nike

在 CLRS 中有关二叉搜索树的章节中,我遇到了移植函数,该函数将节点 u 替换为节点 v,并在父元素中进行适当的更改。这是我为移植功能编写的代码:

void transplant(Node* root, Node* u, Node* v)
{
if(u->parent == NULL)
root = v;
else if(u == u->parent->left)
u->parent->left = v;
else
u->parent->right = v;
if(v != NULL)
v->parent = u->parent;
}

并不是我不明白这是如何工作的,而是我不明白这是为什么。当我进行函数调用时,我基本上是向函数发送指针 rootuv 的副本,对吧?因此,函数中所做的更改实际上不应反射(reflect)在根上,除非我返回它或使用指向指针类型的指针,但它实际上更改了原始根。我将 root 定义为全局变量,这会改变什么吗?

最佳答案

如果u->parentNULL,该函数将不起作用,在这种情况下,只有局部变量root设置为v,从函数外部访问的任何内容都不会改变。

如果u->parent != NULL,则u->parent->leftu->parent->rightu->parent 指向的 Node 的成员,并且这些成员被覆盖,因此更改在 main 中可见。

关于c - 为什么这个移植函数适用于二叉搜索树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12544341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com