2013-12-09 121 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)移出循环。它不会在循环内执行。