[英]binary search tree insertion with argument reference
我编写了以下函数来练习二进制搜索树插入:
void RecursiveInsert(struct Node* &root, int key) {
if (root == nullptr) {
root = new Node(key);
return;
} else if (root->key > key) {
RecursiveInsert(root->left, key);
} else {
RecursiveInsert(root->right, key);
}
}
它有效,但是我不明白为什么要传递对root的引用。 有人知道为什么吗?
您希望函数能够更改存储在要插入的节点的父节点中的指针,使其指向新节点而不是nullptr
。 如果不使用按引用传递,则所有功能可以做的就是修改指针的本地副本,并且实际树中的指针不会更改。
例如,假设您正在查看一个节点,并且希望将新节点插入为该节点的正确子节点。
someNode[key: 123, left: nullptr, right: nullptr]
该函数将使用right
指针作为参数来调用。 您希望函数能够更改节点,因此它看起来像这样:
someNode[key: 123, left: nullptr, right: newNode]
如果不传递引用,则该函数将无法更改节点的right
指针,因为它仅获得了一个副本。 使用引用允许函数实际修改存储在用作参数的节点中的指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.