【发布时间】:2014-01-03 08:00:49
【问题描述】:
首先祝大家新年快乐。我试图修复一段我已经被难住了几个小时的代码。 (注意:我不是一个可靠的程序员。)
我想做的是编写一个函数“searchInsert”,它将接收一个二叉树和一些整数 i。然后它将尝试在树中找到整数 i。如果不存在,则将其插入树中。
其他信息:如果我们确实在树中找到了整数,则返回一个指向它的节点的指针。如果我们没有像之前所说的那样找到它,请将其插入但返回一个指向树的 root 的指针。
我也必须递归地执行此操作。
现在我已经使用任意树以及 i = 98 对其进行了测试,如下所示:
在它看起来像之前。
4
/ \
2 6
/ \ / \
1 3 5 7
之后,它应该是什么样子:
4
/ \
2 6
/ \ / \
1 3 5 7
\
98
但我的代码似乎不起作用。
treelink searchInsert(treelink t, TreeItem i){
treelink keyNode = NULL;
if (t == NULL) {
t = insertTreeNode(t, i);
} else if(i < t->item){
keyNode = searchInsert(t->left,i);
} else if(i > t->item){
keyNode = searchInsert(t->right,i);
} else {
keyNode = t;
return keyNode;
}
return t;
}
其他重要说明:treelink 是一个指向二叉树的指针。假设 insertTreeNode 像给我们的函数一样工作。
任何帮助将不胜感激。
【问题讨论】:
-
我立即注意到的一件事是它至少很奇怪(如果不是不正确的话)是
keyNode被分配但从未在两个条件块中使用。我认为值得重新检查您的逻辑。另外,你能告诉我们运行你的函数后树的实际样子吗? -
“似乎不起作用”具体是什么意思?
-
Cmd - 是的,你是对的,我的大脑似乎没有工作。 @Scott,在运行带有一些测试的代码时。我尝试了给定的树,并且 i = 98。它似乎根本没有插入到树中。我怀疑这与我的回报有关。
-
请澄清
insertTreeNode的参数应该是什么。它取的是树的根,还是它应该插入的分支?还是别的什么? -
它需要一个树的根和一个要搜索的项目。它在插入后返回新树的根。