当前位置: 代码迷 >> C语言 >> 有序二叉树的查找问题
  详细解决方案

有序二叉树的查找问题

热度:273   发布时间:2005-04-06 11:15:00.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,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编辑过]


搜索更多相关的解决方案: 二叉树  data  ErXTree  insert  quot  

----------------解决方案--------------------------------------------------------
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"); }


----------------解决方案--------------------------------------------------------
呵呵。多谢楼主送分了。不客气的收下拉~~~~~~~~~~~
----------------解决方案--------------------------------------------------------
  相关解决方案