2013-12-09 159 views
0

謝謝,現在由於某種原因,它不能按預期工作。當我運行程序時,它只是給出了一個錯誤「bst.exe已停止工作」,它發生在這個函數中。二進制搜索樹插入(C)

static NODE *insert_i(NODE *r, int x) 
{ 
    NODE *leaf; 

    while(r) 
    { 
     if(r->val == x) 
      return r; 

     if(x < r->val && r->left != NULL) 
      r = r->left; 

     else if(x > r->val && r->right != NULL) 
      r = r->right; 
    } 

    leaf = malloc(sizeof(NODE)); 
    leaf->left = NULL; 
    leaf->right = NULL; 
    leaf->val = x; 
    count++; 

    if(x < r->val) 
     r->left = leaf; 

    else 
     r->right = leaf; 

    return r; 
} 


void bst_insert(BST_PTR t, int x) 
{ 
    t->root = insert_i(t->root, x); 
} 
+0

if(r == NULL)//新樹...這應該在while循環之前 – Deepthought

回答

4

你有

while(r) 
{ 
    if(r == NULL) 

if條件將永遠是真實的,彷彿rNULL則循環將結束,不從函數返回任何東西。

+0

哇謝謝...真是愚蠢的我 – juice

1

如果你while循環沒有進入或退出,而不返回會發生什麼?它不會返回任何東西,行爲將是未定義的。

因此,返回NULL表示未找到或將if(r==NULL)移出循環。它不會在循環內執行。