【发布时间】:2014-03-30 19:10:19
【问题描述】:
我正在编写一个模板 BST 类,并注意到我需要像这样声明“插入”参数:
void BST<TYPE>::insert(TYPE iData, int line, node *&n)
代替:
void BST<TYPE>::insert(TYPE iData, int line, node *n)
唯一的区别是传递节点指针的“&”。该函数的完整代码为:
template <class TYPE>
void BST<TYPE>::insert(TYPE iData, int line, node *&n){
if(n == NULL){
n = new node(iData, line, NULL, NULL, NULL);
}
else if(iData < n->data){
insert(iData, line, n->leftChild);
}
else if(iData > n->data){
insert(iData, line, n->rightChild);
}
else if(iData == n->data){
while(n->head != NULL){ //traverse to end of list
n = n->head;
}
n->head = new node(iData, line, NULL, NULL, NULL); //add p to end of list
}
}
树包含重复项,这就是为什么会有else if(iData == n->data)。
我的想法是,如果我们将一个指针传递给一个子节点,那么最终当找到NULL 时,当我们创建一个新节点时,它将位于内存中由leftChild 或rightChild 指针指向的地址。相反,如果我们不添加 & 运算符,似乎会创建新节点但不会“连接”到树。
我想知道是否有人可以在这里解释语法。另外,我为任何违反礼节的行为道歉;这是我关于 SO 的第一篇文章。这个 BST 用于家庭作业,但我问的问题不是。这只是我很好奇的事情。
谢谢。
【问题讨论】:
-
阅读书中关于参考文献的章节。
标签: c++ templates pointers binary-search-tree