回 帖 发 新 帖 刷新版面

主题:[讨论]求解一道二叉树的程序???

#include<stdio.h>
#include<stdlib.h>
typedef char datatype;
typedef struct node           
{
  datatype data;
  struct node *lchild,*rchild;
  }bintnode;
typedef bintnode *bintree;
void createbintree(bintree *t)       
{
char ch;
if ((ch=getchar())==' ')
      *t=NULL;
      else {
      *t=(bintnode *)malloc(sizeof(bintnode));
      (*t)->data=ch;
      createbintree(&(*t)->lchild);
      createbintree(&(*t)->rchild);
      }
}
bintree locate(bintree t, datatype x)  
{   
bintree p;
   if (t==NULL)  return  NULL;
   else
      if (t->data==x) return  t;
      else
         { p=locate(t->lchild,x);
           if (p) return  p;
           else  return  locate(t->rchild,x);
          }
}
main()
{ bintree root,p;
  datatype x;
  createbintree(&root);
  getchar();
  x=getchar();
  p=locate(root,x);
  if (p) printf("found!");
  else printf("no found!") ;
这个程序运行时输入空格再回车就会出现"no found",但是无论输入什么都不能显示"found",我想知道输入什么才会有"found"出现呢?
这个程序是不是有什么错误啊???
星期二就要检查了....
各位高手帮忙看看啊.....
拜托了!!!!

回复列表 (共4个回复)

沙发

你的那个locate程序是不是有问题呀?要不你试一试不要让函数return什么,找到就printf一个类似于标志性的东西,比如if(p)return(1);else return(0),这样的话也许不会有太多多余的东西,因为你并不需要把它打印出来,试试吧,不行我也无能为力了。

板凳


能不能具体说下改哪里啊???
这个程序不是我写的...你这样讲我不是很明白啊.....
拜托啊....

3 楼

我的意思是说把(return t;),(return p;),(return  locate(t->rchild,x);)分别改成(return 1;),(return p;),(return 0),就是说return的部分尽可能的不要太繁琐,否则一点出了点错误程序就不好改了,最好是return 1的时候让它显示found,return 0的时候让它显示not found,这样的话对于程序来说也好理解一点,这是我的全部看法,要是真让我改我也没治了,不好意思了,希望能对你有帮助。

4 楼

if ((ch=getchar())==' ')
      *t=NULL;//?
      else {
      *t=(bintnode *)malloc(sizeof(bintnode));//?
      (*t)->data=ch;//?
      createbintree(&(*t)->lchild);//?
      createbintree(&(*t)->rchild);//?
      }
指针严重错误,好好看书吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册