我正在尝试创建一个二叉搜索树。我使用递归过程将节点插入树中。代码如下。
void BST :: insertRoot(Node* node, int data) {
if (node == NULL)
this -> root = new Node(data);
else
insertOthers(node, data);
}
void BST :: insertOthers(Node* node, int data) {
if(node == NULL) {
node = new Node(data);
return;
}
if(data < node->getData())
insertOthers(node->getLeft(), data);
else
insertOthers(node->getRight(), data);
}
在此代码中,只有一个节点被插入到树中,然后连接就被断开。然而当我改变我的Node*
to Node*&
它工作完美。我仍然不明白这两者之间有什么区别。谁能用它们的内存映射解释这两者之间的区别?谢谢
如果按值获取指针参数:
Node* node
然后修改它:
node = new Node(data);
将更改函数内的局部变量;但不是调用者的论点。这个新值将会丢失,而树将保持原样。
通过引用传递(这是对指针的引用,而不是对引用的指针):
Node*& node
意味着本地参数引用与调用者的参数相同的指针,因此调用者将看到新值的更改。因此,假设其余逻辑是正确的,这将根据您的需要更新树中的指针以指向新节点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)