对于给定的二叉树,输出其先序序列、中序序列、后序序列并输出叶子结点数。
输入格式:
二叉树的先序遍历序列。
提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。
输出格式:
若是非空二叉树,则输出四行内容 第一行是二叉树的先序遍历序列; 第二行是二叉树的中序遍历序列; 第三行是二叉树的后序遍历序列; 第四行是叶子结点数;
若是空二叉树 只需输出叶子数0
输入样例1:
FCA##DB###EHM###G##
输出样例1:
FCADBEHMG
ACBDFMHEG
ABDCMHGEF
4
输入样例2:
#
输出样例2:
0
代码示例如下:
#include<iostream>
using namespace std;
typedef struct bt{
char data;
struct bt *l,*r;
}*tree;
void create(tree &t){
char ch;
scanf("%c",&ch);
if(ch=='#')t=NULL;
else{
t=new(struct bt);
t->data=ch;
create(t->l);
create(t->r);
}
}
void pre(tree t){
if(t){
printf("%c",t->data);
pre(t->l);
pre(t->r);
}
}
void in(tree t){
if(t){
in(t->l);
printf("%c",t->data);
in(t->r);
}
}
void post(tree t){
if(t){
post(t->l);
post(t->r);
printf("%c",t->data);
}
}
int leaf_sum(tree t){
if(!t)return 0;
if(!t->l&&!t->r)return 1;
return leaf_sum(t->l)+leaf_sum(t->r);
}
int main(){
tree t;
create(t);
if(t){
pre(t);
printf("\n");
in(t);
printf("\n");
post(t);
printf("\n");
}
printf("%d",leaf_sum(t));
return 0;
}