簡體   English   中英

二進制搜索樹c ++搜索操作始終為0;

[英]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'有效,但常規方式是使用0nullptr (后者是C ++ 11方式)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM