[英]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.