我在搜索二叉树进行匹配时收到了分段错误。如果找到匹配但它没有找到任何东西它没有正确完成,它不会给我一个分段错误。有人能指出我正确的方向吗?我做错了什么。
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');
}
答案 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)
如果没有子节点,可能您的子节点指针不为空