2014-03-27 41 views
0

我想在BST來搜索數量和功能總是打印「YES」(發生數爲)內C - 二叉搜索樹搜索號碼

這裏是我的代碼主要

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

這裏是我的搜索功能

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

你的輸入是什麼,結構如何使用? –

+1

,你爲什麼在搜索中重新分配東西? –

+0

迭代方法更有效,並且像遞歸方法一樣簡單。 –

回答

2

我真的不明白,爲什麼你會覆蓋root->leftroot->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

你總是返回這是從來沒有空的根源。用簡單的return代替root->left =root->right =應該有所幫助。