在 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;
}
并不是我不明白它是如何工作的,而是为什么它会起作用。当我进行函数调用时,我基本上是在向函数发送指针副本,root
对吗?所以函数中所做的更改实际上不应该反映在根上,除非我返回它或使用指向指针类型的指针,但它实际上改变了原始根。我将 root 定义为全局变量,这会改变什么吗?u
v