2014-03-27 4 views
0

나는 BST의 번호를 검색하려고하고 함수가 항상 (번호가 발견 된) 다음C는 - 이진 검색 트리에 번호 검색

"예"를 인쇄하고 난에있는 코드입니다 여기에 주요

printf("Enter a number to search: "); 
    scanf("%d", &num); 
    if (search(root, num) != NULL) { 
     printf("YES\n"); 
    } 
    else { 
     printf("NO\n"); 
    } 

그리고 당신은 항상 NULL하지 않습니다 루트를 돌려 내 검색 기능

BST* search(BST* root, int value) { 
    if(root == NULL) { 
     return NULL; 
    } 
    else if(value < root->value) { 
     root->left = search(root->left, value); 
    } 
    else if(value > root->value) { 
     root->right = search(root->right, value); 
    } 
    return root; 
} 
+0

입력란은 어떻게 사용되며 struct는 어떻게 사용됩니까? –

+1

및 검색에서 물건을 다시 할당하는 이유는 무엇입니까? –

+0

반복적 인 메소 드는 재귀 적 메도 드보다 간단하고 효율적입니다. –

답변

2

나는 정말로 얻을 수 없다. 왜 root->left 또는 root->right을 덮어 쓴다. 내 생각에 search() 함수는 다음과 같아야합니다.

BST *search(BST *root, int value) 
{ 
    if (root == NULL) 
     return NULL; 
    if (value == root->value) 
     return root; 
    if (value < root->value) 
     return search(root->left, value); 
    if (value > root->value) 
     return search(root->right, value); 

    return NULL; /* not actually reached */ 
} 
1

입니다. root->left =root->right =을 간단한 return으로 바꾸면 도움이됩니다.

관련 문제