2013-08-26 36 views
1

在此BST中,searchbst函数正在完美搜索,但此函数总是返回0。它是不是给5或8,因为我已经设定它这样做是什么代码中的错误,因为它的这个问题是有二分查找树C++查找操作总是给出0;

#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; 

} 
+0

在代码中添加更多跟踪语句以查看它在做什么。或者一次一行地完成一行。 – John

回答

0

你的代码最有可能的是未定义的行为:如果你不遵循导致return 5;return 8;语句的条件,你叫searchbst() ,忽略它的结果,最终你会失去这个功能。你可能想回的searchbst()结果:

return searchbst(T->rchild, k); 

顺便说一句,你有写空指针常量的一种有趣的方式:虽然'\0'作品,传统的方法是使用0nullptr(后者是C++ 11方式)。

+0

谢谢!顺便说一句,我会照顾使用0或nullptr下次:-)离开,再次感谢。 –

1

您没有使用递归调用的返回值。

替换:

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;