[英]binary search tree c++ searching operation always giving 0;
在此BST中,searchbst函数可完美搜索,但此函数始终返回0。 它没有给出5或8,因为我已经对其进行了编程,所以代码中有什么错误,因此会出现此问题
#include<iostream>
using namespace std;
struct bstnode{
bstnode *lchild;
int data;
bstnode *rchild;
};
void creatbst(bstnode *&T,int k){
if(T=='\0'){
T=new(bstnode);
T->data=k;
T->lchild='\0';
T->rchild='\0';
}
else if(k<T->data){
creatbst(T->lchild,k);
}
else if(k>T->data){
creatbst(T->rchild,k);
}
}
int searchbst(bstnode *T,int k){
if(T=='\0')
return 5;
else{
if(k<T->data)
searchbst(T->lchild,k);
else if(k>T->data)
searchbst(T->rchild,k);
else
return 8;
}
}
int main(){
bstnode *T;
T='\0';
creatbst(T,36);
creatbst(T,20);
creatbst(T,75);
creatbst(T,42);
creatbst(T,8);
creatbst(T,31);
creatbst(T,25);
creatbst(T,3);
creatbst(T,80);
cout<<endl<<"searching for ";
cout<<searchbst(T,3);
cout<<endl<<"searching for ";
cout<<searchbst(T,1);
return 0;
}
您没有使用递归调用的返回值。
更换:
if(k<T->data)
searchbst(T->lchild,k);
else if(k>T->data)
searchbst(T->rchild,k);
else
return 8;
有:
if(k < T->data)
return searchbst(T->lchild, k);
else if(k > T->data)
return searchbst(T->rchild, k);
else
return 8;
您的代码很可能具有未定义的行为:如果您不遵循导致return 5;
的条件return 5;
或return 8;
语句,您调用searchbst()
,忽略其结果,最终导致该函数崩溃。 您可能打算返回searchbst()
的结果:
return searchbst(T->rchild, k);
顺便说一句,您有一种有趣的方式来编写空指针常量:尽管'\\0'
有效,但常规方式是使用0
或nullptr
(后者是C ++ 11方式)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.