#include"stdio.h"
typedef struct node
{ int data;
struct node *left,*right;
}ErXTree;
void insert(ErXTree **t,ErXTree *s)
{ if(*t==NULL) *t=s;
else if(s->data==(*t)->data) return;
else if(s->data<(*t)->data) insert(&(*t)->left,s);
else if(s->data>(*t)->data) insert(&(*t)->right,s);
}
void creat(ErXTree **t1)
{ int x,k=0;
ErXTree *s,*t;
t=NULL;
scanf("%d",&x);
while(x!=0)
{ s=(ErXTree*)malloc(sizeof(ErXTree));
s->data=x;if(k==0)*t1=s;k++;
s->left=NULL;
s->right=NULL;
insert(&t,s);
scanf("%d",&x);
}
}
ErXTree *search(ErXTree *b,int x)
{ if(b=NULL) return NULL;
else
{ if(b->data==x) return b;
if(x<b->data) return (search(b->left,x));
else return (search(b->right,x));
}
}
main()
{ ErXTree *t;
int x,k;
creat(&t);
printf("输入要查找的关键字:");
scanf("%d",&x);
if(search(t,x)==x)
printf("找到了");
else printf("没有找到");
} //输入要查找的值后, 程序就结束了
[此贴子已经被作者于2005-4-6 11:17:58编辑过]
----------------解决方案--------------------------------------------------------
if(b=NULL) return NULL;
这里应该是==不是=
if(search(t,x)==x)
这里的返回类型不对search() 返回的不是整形
----------------解决方案--------------------------------------------------------
#include "malloc.h" #include"stdio.h" typedef struct node { int data; struct node *left,*right; }ErXTree; void insert(ErXTree **t,ErXTree *s) { if(*t==NULL) *t=s; else if(s->data==(*t)->data) return; else if(s->data<(*t)->data) insert(&(*t)->left,s); else if(s->data>(*t)->data) insert(&(*t)->right,s); } void creat(ErXTree **t1) { int x; ErXTree *s; printf("please input number:\n"); scanf("%d",&x); while(x!=0) { s=(ErXTree*)malloc(sizeof(ErXTree)); s->data=x; s->left=NULL; s->right=NULL; insert(t1,s); s=NULL; printf("please input number(0 is end):\n"); fflush(stdin); scanf("%d",&x); } } int search(ErXTree *b,int x) { if(b==NULL) return 0; else { if(b->data==x) return b->data; if(x<b->data) return (search(b->left,x)); else return (search(b->right,x)); } } main() { ErXTree *t=NULL,*p=NULL; int x; creat(&t); printf("输入要查找的关键字:"); scanf("%d",&x); if(search(t,x)==x) printf("找到了\n"); else printf("没有找到\n"); }
呵呵。朋友会这个不错。有兴趣进来群和我讨论么。Q群是7976395 加我的时候你注明一下(数据结构,因为我群早满人。你进来我踢我的朋友出去。就加你一个) 你错了很多地方。我现在没时间一一说出来。你拿我程序上机运行。然后自己慢慢看。应该可以看的明白的。我建议和我一样。有提示输出。程序是写给人看的。 不是自己看的。你什么都不提示人家根本不知道你要做什么。衷心建议。
----------------解决方案--------------------------------------------------------
fflush(stdin);
这个是清流函数。。。。。
----------------解决方案--------------------------------------------------------
兄弟。你把我的主函数改成这样。 main() { ErXTree *t=NULL; int x; creat(&t); printf("输入要查找的关键字:"); scanf("%d",&x); if(search(t,x)==x) printf("找到了\n"); if(search(t,x)!=x) printf("没有找到\n"); }
然后在这里也改一下 int search(ErXTree *b,int x) { if(b==NULL) return NULL; else 其他的不用动。这样就完美多了。上面那个如果我没插入0。但是我查找的找0他也会说成功。因为你把0作为结束标记。我把整条程序在发一次吧 #include "malloc.h" #include"stdio.h" typedef struct node { int data; struct node *left,*right; }ErXTree; void insert(ErXTree **t,ErXTree *s) { if(*t==NULL) *t=s; else if(s->data==(*t)->data) return; else if(s->data<(*t)->data) insert(&(*t)->left,s); else if(s->data>(*t)->data) insert(&(*t)->right,s); } void creat(ErXTree **t1) { int x; ErXTree *s; printf("please input number:\n"); scanf("%d",&x); while(x!=0) { s=(ErXTree*)malloc(sizeof(ErXTree)); s->data=x; s->left=NULL; s->right=NULL; insert(t1,s); s=NULL; printf("please input number(0 is end):\n"); fflush(stdin); scanf("%d",&x); } } int search(ErXTree *b,int x) { if(b==NULL) return NULL; else { if(b->data==x) return b->data; if(x<b->data) return (search(b->left,x)); else return (search(b->right,x)); } } main() { ErXTree *t=NULL; int x; creat(&t); printf("输入要查找的关键字:"); scanf("%d",&x); if(search(t,x)==x) printf("找到了\n"); if(search(t,x)!=x) printf("没有找到\n"); }
----------------解决方案--------------------------------------------------------
呵呵。多谢楼主送分了。不客气的收下拉~~~~~~~~~~~
----------------解决方案--------------------------------------------------------