分割错误搜索二叉树

时间:2013-11-08 18:48:53

标签: c pointers memory segmentation-fault binary-search-tree

我在搜索二叉树进行匹配时收到了分段错误。如果找到匹配但它没有找到任何东西它没有正确完成,它不会给我一个分段错误。有人能指出我正确的方向吗?我做错了什么。

void search() {
    char temp,temp1[15];
    struct node *s=root;
    int i=0;

    do{
        printf("Enter Name To Be Searched\n");
        scanf("%s",temp1);
        getchar();
        i=0;
        s=root;
        while(s!=NULL && i==0){
            if(strcmp(s->data,temp1)< 0)
                s=s->right;
            if(strcmp(s->data,temp1)>0)
                s=s->left;
            if(strcmp(s->data,temp1)==0)
                i=1;
        }
        if(i==0)
            printf("Element Not Found\n");
        else
            printf("Element Found\n");
        printf("Enter More Elements[Y/N]:\n");
        temp=getchar();
        printf("%c", temp);
    }while(temp=='y');
}

2 个答案:

答案 0 :(得分:3)

您更改了s,然后在下一个if语句中再次比较它。还要考虑一下,如果某些东西不大,那么零也不要小,那么它必须是相等的。

while (s!=NULL) {
    const int cmp = strcmp(s->data,temp1);
    if (cmp < 0) 
        s = s->right;
    else if (cmp > 0)
        s = s->left;
    else {
        i = 1;
        break;
    }
}

试试。

答案 1 :(得分:0)

如果没有子节点,可能您的子节点指针不为空