对于给定的二叉树,输出其先序序列、中序序列、后序序列并输出叶子结点数。
输入格式:
二叉树的先序遍历序列。
提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。
输出格式:
若是非空二叉树,则输出四行内容 第一行是二叉树的先序遍历序列; 第二行是二叉树的中序遍历序列; 第三行是二叉树的后序遍历序列; 第四行是叶子结点数;
若是空二叉树 只需输出叶子数0
输入样例1:
FCA##DB###EHM###G##
输出样例1:
FCADBEHMG
ACBDFMHEG
ABDCMHGEF
4
输入样例2:
#
输出样例2:
0
代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct TNode *TreeNode;
struct TNode{
char data;
TreeNode lchild;
TreeNode rchild;
};
int count=0;
TreeNode* create(TreeNode T){
char s;
scanf("%c",&s);
if(s=='#'){
T=NULL;
}else {
T = (TreeNode) malloc(sizeof(TreeNode));
T->data = s;
T->lchild = create(T->lchild);
T->rchild = create(T->rchild);
}
return T;
}
void xianXu(TreeNode T){
if(!T) return;
printf("%c",T->data);
xianXu(T->lchild);
xianXu(T->rchild);
}
void zhongXu(TreeNode T){
if(!T) return;
zhongXu(T->lchild);
printf("%c",T->data);
zhongXu(T->rchild);
}
void houXu(TreeNode T){
if(!T) return;
houXu(T->lchild);
houXu(T->rchild);
printf("%c",T->data);
}
void yeZi(TreeNode T){
if(!T) return;
if(T->lchild==NULL&&T->rchild==NULL){
count++;
}
yeZi(T->lchild);
yeZi(T->rchild);
}
int main(){
TreeNode T;
T= create(T);
if(T==NULL){
printf("0");
}else{
xianXu(T);
printf("\n");
zhongXu(T);
printf("\n");
houXu(T);
printf("\n");
yeZi(T);
printf("%d",count);
}
return 0;
}