2016-08-27 8 views
0

Я только начал изучать дерево и внедрял его с использованием языка c. Я думаю, что я сделал программу для дерева (двоичное дерево поиска). Но при поиске значения и печати, когда элемент был найден или нет, функция поиска не возвращает значение правильно (или неправильное значение) Я присоединяюсь к этому кодуФункция поиска не возвращает значение

// to search in binary search tree 
#include<stdio.h> 
#include<conio.h> 
#include<stdlib.h> 

struct bstnode 
{ 
    int data; 
    struct bstnode *left; 
    struct bstnode *right; 
}; 

struct bstnode *insert(struct bstnode *,int); 
int search(struct bstnode *,int); 

void main() 
{  
    int n,s,n1; 
    char ch; 
    struct node *root; 
    clrscr(); 
    root=NULL; 
    do 
    { 
     printf("\nEnter a number\n"); 
     scanf("%d",&n); 
     root=insert(root,n); 
     printf("\nDo You Wish to enter more\n"); 
     ch=getch(); 
    } while(ch=='Y'||ch=='y'); 

    printf("Enter a number to search"); 
    scanf("%d",&n1); 
    s=search(root,n1); 
    if(s==1) 
     printf("Found"); 
    else 
     printf("Not found"); 
    getch(); 
} 

struct bstnode* insert(struct bstnode *root,int data) 
{ 
    struct bstnode *newnode=(struct bstnode*)malloc(sizeof(struct bstnode)); 
    newnode->data=data; 
    newnode->left=NULL; 
    newnode->right=NULL; 
    if(root==NULL) 
    { 
     root=newnode; 
    } 
    else if(data<=root->data) 
    { 
     root->left=insert(root->left,data); 
    } 
    else 
    { 
     root->right=insert(root->right,data); 
    } 
    return(root); 
} 

int search(struct bstnode* root,int data) 
{ 
    if(root==NULL) 
     return 0; 
    if(root->data==NULL) 
     return 1; 
    else if(data<=root->data) 
     return(root->left,data); 
    else 
     return(root->right,data); 
} 

Пожалуйста, помогите !!!!

+1

Шаг через код с отладчиком и увидеть, где он идет не так. – Barmar

+2

Что вы думаете: 'return (root-> left, data)' будет делать? Вы должны вызывать функцию 'search' рекурсивно, но вы просто возвращаете« данные »с этим. – Barmar

+1

'if (root-> data == NULL)' неверно. 'data' является' int', 'NULL' следует использовать с указателями. – Barmar

ответ

1

Ваша search функция имеет две проблемы:

  1. Он никогда не проверяет, нашел ли он data. Вместо этого он проверяет наличие root->data == NULL, но это неверно.
  2. Он должен вызывать себя рекурсивно в левом или правом поддереве, но это не так.

Правильный код:

int search(struct bstnode* root,int data) 
{ 
    if(root==NULL) { 
     return 0; 
    } else if(root->data==data) { 
     return 1; 
    } else if(data<=root->data) { 
     return search(root->left,data); 
    } else { 
     return search(root->right,data); 
    } 
} 
+0

Спасибо, теперь вы исправили мою проблему. Еще раз спасибо, пожалуйста, продолжайте помогать мне. – user6547375

+0

Надеюсь, вы изучите больше, так что вам не обязательно приходить сюда, чтобы заставить других людей отлаживать ваши программы для вас. Вы никогда не станете программистом, если вы этого не узнаете. – Barmar

Смежные вопросы