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