这是我在BST中搜索的功能:
BST* BSTFindElement(BST const *pTree, float find_value)
{
if(pTree)
{
if(find_value > pTree->value)
BSTFindElement(pTree->right, find_value);
else if(find_value < pTree->value)
BSTFindElement(pTree->left, find_value);
return (BST*)pTree;
}
else
{
return 0;
}
}
当浮点数不在树中时,会出现问题, 以任何方式返回(BST *)pTree。 我调试了,我注意到它确实运行良好,如果例如根是'3.6'并且我搜索了5它转到pTree-&gt;右边并搜索它,然后当它跳过 如果(pTree)它返回0但由于某种原因返回到顶部并再次返回(BST *)pTree ...我无法自己解决问题,任何人都可以帮助我?谢谢!
答案 0 :(得分:2)
您正在寻找3.6并且ptree-&gt;值为5,所以你去了这里:
else if(find_value < pTree->value)
BSTFindElement(pTree->left, find_value);
然后ptree为null所以你返回0,你回到上一个堆栈帧,我的意思是恰好在BSTFindElement(pTree-&gt; left,find_value)之后;而下一个陈述是
return (BST*)pTree;
这就是发生了什么,你返回ptree,破坏以前返回的0.如果你把它重写为:
else if(find_value < pTree->value)
BSTFindElement(pTree->left, find_value);
else
return (BST*)pTree;
这仍然不应该解决所有问题。我想这会起作用
if(find_value > pTree->value)
**return** BSTFindElement(pTree->right, find_value);
else if(find_value < pTree->value)
**return** BSTFindElement(pTree->left, find_value);
**else**
return (BST*)pTree;
答案 1 :(得分:1)
似乎当查找值与pTree值不同时,您总是返回输入pTree。 您是否尝试过将代码更改为:
BST* BSTFindElement(BST const *pTree, float find_value){
if(pTree){
if(find_value > pTree->value){
return BSTFindElement(pTree->right, find_value);
}
else if(find_value < pTree->value){
return BSTFindElement(pTree->left, find_value);
}
return (BST*)pTree;
}
else{
return 0;
}