2015-04-03 68 views
-2

我正在寫一個代碼來創建一個二叉樹,但出了問題我試圖調試但找不到任何人都可以找到它。即我試圖任何人都可以找出爲什麼樹沒有鏈接

代碼是作爲遵循..

頭文件..

#include< stdio.h> 
#include< stdlib.h> 

結構是..

struct node { 
    int data; 
    struct node *left; 
    struct node *right; 
} 

其他聲明..

*head,*p=NULL; 
int count=0; 

create()功能..

void create(int m) { 
    if(count==0) 
    { 
     p=(struct node *)malloc(sizeof(struct node)); 
     p->data=m; 
     p->left=NULL; 
     p->right=NULL; 
     head=p; 
     count++; 
    } 
    else { 
     p=(struct node *)malloc(sizeof(struct node)); 
     p->data=m; 
     p->left=NULL; 
     p->right=NULL; 
    } 
} 

主要功能是..

int main() 
{ 
    int n,i,m; 
    scanf("%d",&n); 

    for(i=0;i<n;i++) { 
     scanf("%d",&m); 
     if(i==0) {create(m);} 

     if(i>0) { 
      while(1) { 
       if(m < p->data) 
        p=p->left; 
       else 
        p=p->right; 

       if(p==NULL) 
       { 
        create(m); 
        break; 
       } 
      } 
     } 

     p=head; 
    } 

    printf("%d",p->left->data); //printing the data 
    return 0; 
} 

回答

0

想想,當i = 1,再算上也爲1,

if(m<p->data) 
{ 
    p=p->left; 
} 

什麼都會發生的事情,當p->左null?現在p是一個空指針,對嗎?然後,你這樣做......

if(p==NULL) 
{ 
    create(m); 
    break; 
} 

讓我們來看看,什麼是發生創建(M)。現在在創建()其他部分將工作。

else 
{ 
    p=(struct node *)malloc(sizeof(struct node)); 
    p->data=m; 
    p->left=NULL; 
    p->right=NULL; 
} 

這也是可以的。現在你有一個孩子的頭。這個孩子的參考文獻在p。對?但你所犯的錯誤是,

p=head; 

這意味着,你做了什麼都沒有了。現在沒有頭的孩子的參考。 p保持頭的參考。看,頭 - >左頭 - >右總是NULL無論你保持在p。因此,您必須創建一個節點,您可以在其中找到NULL,而不是p。它沒有給你任何結果。

希望它能幫助你。 :)

相關問題