标题:有序二叉树的查找问题
只看楼主
想你的天空
Rank: 2
等 级:新手上路
威 望:5
帖 子:610
专家分:0
注 册:2004-12-30
 问题点数:0 回复次数:5 
有序二叉树的查找问题
#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 
2005-04-06 11:15
luckbird
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2005-3-21
得分:0 
if(b=NULL) return NULL;
这里应该是==不是=
if(search(t,x)==x)
这里的返回类型不对search() 返回的不是整形

2005-04-20 12:40
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
得分: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 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 加我的时候你注明一下(数据结构,因为我群早满人。你进来我踢我的朋友出去。就加你一个) 你错了很多地方。我现在没时间一一说出来。你拿我程序上机运行。然后自己慢慢看。应该可以看的明白的。我建议和我一样。有提示输出。程序是写给人看的。 不是自己看的。你什么都不提示人家根本不知道你要做什么。衷心建议。


生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-04-21 08:14
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
得分:0 
fflush(stdin);
这个是清流函数。。。。。

生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-04-21 08:16
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
得分:0 

兄弟。你把我的主函数改成这样。 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"); }


生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-04-21 08:37
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
得分:0 
呵呵。多谢楼主送分了。不客气的收下拉~~~~~~~~~~~

生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-04-22 07:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-14915-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.374561 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved