【发布时间】:2015-02-13 18:03:52
【问题描述】:
我正在尝试创建一个二叉搜索树。我使用递归过程将节点插入树中。代码如下。
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* 更改为Node*& 时,它可以完美运行。我仍然无法理解这两者之间有什么区别。谁能用他们的内存映射来解释这两者之间的区别?谢谢
【问题讨论】:
-
你和另一个问题I answered recently有同样的问题。最大的区别是那是 C,这是 C++。因此,一种方法(可能不是最好的)是传递对指针的引用,就像您对
Node*&所做的那样。 -
Node*是一个单独的指针值,独立于所有其他变量。Node*&是对其他地方的另一个指针的引用;例如,将其更改为指向另一个对象也会改变所指对象。
标签: c++ pointers data-structures binary-search-tree