2014-10-01 185 views
-3

請幫我用這個C++代碼(我是初學者:P) 它的bug ... plz告訴我哪裏出錯了! 注:我已經使用COUT調試......二進制搜索樹C++

#include<iostream> 
using namespace std; 
struct node 
{ 
int val; 
node* left; 
node* right; 
}*root; 
void insrt(node* a,int n) 
{ 
if(a==NULL) 
{ 
    a=new node; 
    a->val=n; 
    a->left=NULL; 
    a->right=NULL; 
    cout<<"_"; 
} 
else if(a->val>n) 
{ 
    cout<<"<"; 
    insrt(a->left,n); 
} 
else 
{ 
    cout<<">"; 
    insrt(a->right,n); 
} 
} 
int main() 
{ 
int n,x,i; 
cout<<"Enter the size: "; 
cin>>n; 
root=NULL; 
for(i=0;i<n;i++) 
{ 
    cin>>x; 
    insrt(root,x); 
} 
return 0; 
} 

它編譯和運行,甚至但輸出我得到的是:

Enter the size: 3 
1 
_2 
_3 
_ 

但它應該是:

Enter the size: 3 
1 
_2 
>_3 
>>_ 

回答

2

您正在更改a的值insrt,但這只是輸入參數的副本。在insrt中更改a的值不會改變main中的root的值。

解決此問題的一種方法是從insrt返回有效節點並在main中使用它。

node* insrt(node* a,int n) 
{ 
    if(a==NULL) 
    { 
     a=new node; 
     a->val=n; 
     a->left=NULL; 
     a->right=NULL; 
     cout<<"_"; 
     return a; 
    } 

    else if(a->val>n) 
    { 
     cout<<"<"; 
     a->left = insrt(a->left,n); 
    } 
    else 
    { 
     cout<<">"; 
     a->right = insrt(a->right,n); 
    } 
    return a; 
} 

int main() 
{ 
    int n,x,i; 
    cout<<"Enter the size: "; 
    cin>>n; 
    root=NULL; 
    for(i=0;i<n;i++) 
    { 
     cin>>x; 
     root = insrt(root,x); 
    } 
    return 0; 
} 
+0

謝謝,我明白你的觀點。 – Shahbaz23 2014-10-01 15:55:58

+0

@ Shahbaz23,不客氣。很高興我能幫上忙。 – 2014-10-01 15:59:31