这是我在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;

10-04 14:07