回 帖 发 新 帖 刷新版面

主题:[讨论]二叉树的前序建立

#include "stdio.h"
 #include "stdlib.h"
 #include "string.h"
 typedef struct stree
 {int data;
  struct stree *lchild,*rchild;
  }tree;/*定义这个属结构为tree*/
  tree *creat()/*建立一个二叉树*/
  { tree *t;
  char ch;
  scanf("%c",&ch);
  if(ch=='#')
  t=NULL;
  else
  {
  t=(tree *)malloc(sizeof(tree));
  t->data=ch;
  t->lchild=creat();/*这个是用先序建立二叉树*/
  t->rchild=creat();
  }
  return(t);
  }
  void intree(tree *t)/*进行先序遍历*/
  { if(t)
   { printf("%c",t->data);
     intree(t->lchild);
     intree(t->rchild);
   }
   }
   /*叶子总数是*/
  int count(tree *t)
  { if(t==NULL)
    return 0;
    else if((t->lchild==NULL)&&(t->rchild==NULL))
     return (1);
    else
     return(count(t->lchild)+count(t->rchild));
   } 
  /* 叶子总数*/
 int count2(tree  *t)
    { int i=0,j=0;
  if(!t)
    return 0;
    else

    { i=count2(t->rchild);
      j=count2(t->lchild);
    }
    if(i==0&&j==0)
    return (1);
    else
    return (j+i);
   }
 int deep(tree *s)/*测试树深度*/
    { int i,j;
  if(!s)
  return (0);
  else
  { i=deep(s->lchild);
    j=deep(s->rchild);
  }
  return((i>j?i:j)+1);
  }
  int all(tree *s)/*总的节点的个数*/
  {
  int i,j;
  if(!s)
  return (0);
  else
  { i=deep(s->lchild);
    j=deep(s->rchild);
  }
  return (j+i+1);
 }
   main()
   { tree *s;
   int n=0 ;
    s=creat();
    n=count(s);
    printf("the thief is%4d\n",n);
    n=count2(s);/* 测试叶子的个数*/
     printf("\nthe thief is%4d\n",n);
    intree(s);/*先序遍历输出*/
    printf("\n the DEEP is %4d\n",deep(s));
    printf("\n the all is %4d\n",all(s));
    getch();
  }

但是我不明白的就是,怎用输入先序树的过程,就是说,我该怎样输入值?
但是,我是这样输入的,但是,却出不来结果,请各位高手,帮忙介绍一个下怎样去输入值?
再就是 ,我用它来求节点个数,答案不正确 ,,就是说,我输入125###6##,深度,节点个数,叶子个数都是正确的,但是,中序遍历结果不正确,而且后续遍历也不正确。中序为2516,后续为2561

回复列表 (共3个回复)

沙发

你说说你的输入?应该是输入方式不对

板凳

输入需要看你的树结构是怎样的,例如一颗有个根节点和一个左孩子的树,先输入根节点元素a,然后输入左孩子b,再输入#表示左孩子没有左孩子,再输入#表示左孩子没有右孩子,再输入#表示根节点没有右孩子,输入完毕

3 楼

我自己找到原因了恩,,,就是我输入的有问题啊,再就是,
int all(tree *s)/*总的节点的个数*/
  {
  int i,j;
  if(!s)
  return (0);
  else
  { i=deep(s->lchild);/* 这里这个deep不对应该为all啊,我是直接复制上面的,没检查出来*/
    j=deep(s->rchild);
  }
  return (j+i+1);
 }

我来回复

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