2012-12-16 142 views
0

我正從一個輸入文件中讀取整數,這個文件有一些整數並試圖創建一個二叉樹。我無法一直弄清楚它爲什麼會進入(l == NULL)狀態。第二次應根據讀取值是否大於根值來左右移動。 感謝任何幫助。謝謝!二叉樹插入根

leaf* create_leaf(int i) 
{ 
    leaf* l = (leaf*)malloc(sizeof(leaf)); 
    l->left = NULL; 
    l->right = NULL; 
    l->data = i; 
} 

leaf* l=NULL; 
while(fscanf(input,"%d",&i) != EOF) 
    { 
     add_leaf(l,i); 
    } 

void add_leaf(leaf* l, int i) 
{ 

    if(l == NULL) 
    { 
    printf("adding root\n"); 
    l = create_leaf(i); 
    } 

else if(i <= l->data) 
    { 
    if(l->left == NULL) 
     { 
     l->left = create_leaf(i);} 
    else { 
     add_leaf(l->left,i); } 
    } 
else 
    { 
    if(l->right == NULL) 
     { 
    l->right = create_leaf(i); } 
    else { 
     add_leaf(l->right,i); } 
    } 
} 

回答

1

當您重新分配在add_leaf()ll新值不會傳播給調用者當函數返回。

你有兩個選擇:

  • 你可以把它作爲一個雙指針,leaf** l,並相應地改變你的代碼。
  • 你可以return從功能新的l
3

您的代碼有幾個問題。

首要的問題是你不返回你在create_leaf函數中創建的葉。

其次,請不要投射malloc,這是不必要的,可以掩蓋問題。

第三請檢查malloc的返回碼。雖然不能保證你的內存可用,即使malloc表示過度使用系統成功了,但如果你得到一個NULL值肯定會很糟糕。