2013-12-09 8 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 조건이 결코 사실이 될 것이다있다.

+0

와우 덕분에 ... 너무 바보 같아요. – juice

1

당신이 while 루프가 돌아 가지 않고 입력하거나 종료되지 않으면 어떻게됩니까? 아무것도 반환하지 않으며 동작은 정의되지 않습니다.

따라서 NULL을 반환하면 찾을 수 없음을 나타내거나 if(r==NULL)을 루프 밖으로 이동시킵니다. 루프 내에서 실행되지 않습니다. r 함수에서 아무 것도 반환하지 않고, NULL 다음 루프가 끝날 것 인 것처럼