【发布时间】:2017-06-14 19:57:45
【问题描述】:
这是我插入函数的第一部分
void BinTree::insert(Node * temp, NodeData * insData)
{
if (temp == NULL)
{
temp = new Node;
temp->pData = insData;
temp->left = NULL;
temp->right = NULL;
return;
}
//recursively go left or right
//....rest of the function
}
问题在于第一个 if 语句。我正在添加几个节点。
这是调用插入函数的函数。
void BinTree::insertMiddle(NodeData* arr[], int bottom, int top)
{
if (bottom <= top)
{
int middle = (bottom + top) / 2;
if (arr[middle] == NULL)
{
return;
}
else
{
insert(root, arr[middle]);
arr[middle] = NULL;
insertMiddle(arr, bottom, middle - 1);
insertMiddle(arr, middle + 1, top);
}
}
else
{
return;
}
}
我发现插入所有节点后,根仍然是NULL。事实上,插入函数中的第一个 if 语句每次都变为真。
第一次插入后它不应该为空。
我认为我不会在任何地方删除任何内容或将根设置为 NULL。
代码有什么问题?
【问题讨论】:
-
调试器是解决此类问题的正确工具。 在询问 Stack Overflow 之前,您应该逐行浏览您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
-
重复这个:函数参数是局部变量。对局部变量的赋值对外界没有影响.
-
我不知道指针是按值传递的。我认为这是一个新指针,但它指向传递的指针指向的同一个对象,所以没关系。不过我错了。我的错。
标签: c++ pointers recursion binary-search-tree