Problem Description
已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。
Input
输入一个长度小于50个字符的字符串。
Output
输出共有4行:
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
Example Input
abc,,de,g,,f,,,Example Output
cbegdfa
cgefdba
3
5
Hint
#include<stdio.h>
#include<iostream>
using namespace std;
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
char ch[51];
int cnt;
int count=0;
BiTree creat()
{
BiTNode *T;
if(ch[++cnt]==',')
T=NULL;
else{
T=new BiTNode;
T->data=ch[cnt];
T->lchild=creat();
T->rchild=creat();
}
return T;
}
void Inorder(BiTree T){
if(T){
Inorder(T->lchild);
cout<<T->data;
Inorder(T->rchild);
}
}
void Postorder(BiTree T){
if(T){
Postorder(T->lchild);
Postorder(T->rchild);
cout<<T->data;
}
}
void leaves(BiTree T)
{
if(T!=NULL)
{
if(T->lchild==NULL&&T->rchild==NULL)
{
count++;
}
leaves(T->lchild);
leaves(T->rchild);
}
}
int Depth(BiTree T){
int n,m;
if(T==NULL)
return 0;
else{
m=Depth(T->lchild);
n=Depth(T->rchild);
if(m>n)
return (m+1);
else
return (n+1);
}
}
int main()
{
while(~scanf("%s",ch))
{
cnt = -1;
int n;
BiTNode *T;
T=creat();
Inorder(T);
printf("\n");
Postorder(T);
printf("\n");
leaves(T);
printf("%d\n",count);
n=Depth(T);
printf("%d\n",n);
}
return 0;
}