这是我在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->右边并搜索它,然后当它跳过
如果(pTree)返回0,但由于某种原因返回顶部并再次返回(BST*)pTree。。。我自己解决不了这个问题,有人能帮我解决吗?谢谢!
最佳答案
如果您要查找3.6,ptree->值是5,那么您可以转到这里:
else if(find_value < pTree->value)
BSTFindElement(pTree->left, find_value);
然后ptree为空,所以返回0,返回上一个堆栈帧,我的意思是正好在BSTFindElement之后(ptree->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;