主题:[讨论]二叉树的前序建立
#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
#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