C 递归BST查找元素不';工作不好

C 递归BST查找元素不';工作不好,c,C,这是我在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)

这是我在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*BSTFindElement(BST const*pTree,float find_值)
{
if(pTree)
{
如果(查找值>树>值)
BSTFindElement(pTree->right,find_值);
else if(查找值value)
BSTFindElement(pTree->left,find_值);
返回(BST*)pTree;
}
其他的
{
返回0;
}
}
当浮点数不在树中时会出现问题, 无论如何,它返回(BST*)pTree。 我调试了它,我注意到它工作得很好,例如,如果根是'3.6',我搜索了5,它会转到pTree->right并搜索它,然后当它跳过时
如果(pTree)它返回0,但由于某种原因返回顶部并再次返回(BST*)pTree。。。我自己解决不了这个问题,有人能帮我吗?谢谢

似乎当find值与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;
}
BST*BSTFindElement(BST const*pTree,float find_值){
if(pTree){
如果(查找值>树>值){
返回BSTFindElement(pTree->right,find_值);
}
else if(查找值value){
返回BSTFindElement(pTree->left,find_值);
}
返回(BST*)pTree;
}
否则{
返回0;
}

似乎当find值与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;
}
BST*BSTFindElement(BST const*pTree,float find_值){
if(pTree){
如果(查找值>树>值){
返回BSTFindElement(pTree->right,find_值);
}
else if(查找值value){
返回BSTFindElement(pTree->left,find_值);
}
返回(BST*)pTree;
}
否则{
返回0;
}

似乎当find值与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;
}
BST*BSTFindElement(BST const*pTree,float find_值){
if(pTree){
如果(查找值>树>值){
返回BSTFindElement(pTree->right,find_值);
}
else if(查找值value){
返回BSTFindElement(pTree->left,find_值);
}
返回(BST*)pTree;
}
否则{
返回0;
}

似乎当find值与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;
}
BST*BSTFindElement(BST const*pTree,float find_值){
if(pTree){
如果(查找值>树>值){
返回BSTFindElement(pTree->right,find_值);
}
else if(查找值value){
返回BSTFindElement(pTree->left,find_值);
}
返回(BST*)pTree;
}
否则{
返回0;
}

您正在查找3.6,而ptree->值为5,因此您可以转到这里:

else if(find_value < pTree->value)
        BSTFindElement(pTree->left, find_value);
这就是发生的情况,您返回ptree,销毁以前返回的0。如果您将其重写为:

else if(find_value < pTree->value)
        BSTFindElement(pTree->left, find_value);
else    
        return (BST*)pTree;
else if(查找值value)
BSTFindElement(pTree->left,find_值);
其他的
返回(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;
if(查找值>树->值)
**返回**BSTFindElement(树->右,查找值);
else if(查找值value)
**返回**BSTFindElement(树->左,查找值);
**否则**
返回(BST*)pTree;

您正在查找3.6,而ptree->值为5,因此您可以转到这里:

else if(find_value < pTree->value)
        BSTFindElement(pTree->left, find_value);
这就是发生的情况,您返回ptree,销毁以前返回的0。如果您将其重写为:

else if(find_value < pTree->value)
        BSTFindElement(pTree->left, find_value);
else    
        return (BST*)pTree;
else if(查找值value)
BSTFindElement(pTree->left,find_值);
其他的
返回(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;
if(查找值>树->值)
**返回**BSTFindElement(树->右,查找值);
else if(查找值value)
**返回**BSTFindElement(树->左,查找值);
**否则**
返回(BST*)pTree;

您正在查找3.6,而ptree->值为5,因此您可以转到这里:

else if(find_value < pTree->value)
        BSTFindElement(pTree->left, find_value);
这就是发生的情况,您返回ptree,销毁以前返回的0。如果您将其重写为:

else if(find_value < pTree->value)
        BSTFindElement(pTree->left, find_value);
else    
        return (BST*)pTree;
else if(查找值value)
BSTFindElement(pTree->left,find_值);
其他的
返回(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;
if(查找值>树->值)
**返回**BSTFindElement(树->右,查找值);
else if(查找值value)
**返回**BSTFindElement(树->左,查找值);
**否则**
返回(BST*)pTree;

您正在查找3.6,而ptree->值为5,因此您可以转到这里:

else if(find_value < pTree->value)
        BSTFindElement(pTree->left, find_value);
这就是发生的情况,您返回ptree,销毁以前返回的0。如果您将其重写为:

else if(find_value < pTree->value)
        BSTFindElement(pTree->left, find_value);
else    
        return (BST*)pTree;
else if(查找值value)
BSTFindElement(pTree->left,find_值);
其他的
返回(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;
if(查找值>树->值)
**返回**BSTFindElement(树->右,查找值);
else if(查找值value)
**返回**BSTFindElement(树->左,查找值);
**否则**
返回(BST*)pTree;