输入格式:
二叉树的先序遍历序列。
提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。
输出格式:
若是非空二叉树,则输出四行内容 第一行是二叉树的先序遍历序列; 第二行是二叉树的中序遍历序列; 第三行是二叉树的后序遍历序列; 第四行是叶子结点数;
若是空二叉树 只需输出叶子数0
输入样例1:
FCA##DB###EHM###G##
输出样例1:
FCADBEHMG
ACBDFMHEG
ABDCMHGEF
4
输入样例2:
#
输出样例2:
0
代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Status int
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef char TElemType;
//定义二叉树结构
typedef struct BiNode
{
TElemType data;
struct BiNode *lchild, *rchild;
}BiNode, *BiTree;
//二叉树的存储结构
//二叉树
void CreatBiTree(BiTree *T)
{
char ch;
scanf("%c", &ch);
if(ch == '#')
{
*T = NULL;
}
else
{
*T = (BiTree)malloc(sizeof(BiNode));
(*T)->data = ch;
CreatBiTree(&(*T)->lchild);
CreatBiTree(&(*T)->rchild);
}
}
//先序便利输出二叉树
void PreOrderTraverse(BiTree T)
{
if(T)
{
printf("%c", T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
//中序遍历二叉树
void InOrderTraverse(BiTree T)
{
if(T)
{
InOrderTraverse(T->lchild);
printf("%c", T->data);
InOrderTraverse(T->rchild);
}
}
//后序遍历二叉树
void PostOrderTraverse(BiTree T)
{
if(T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c", T->data);
}
}
//计算叶子个数
int NodeCount(BiTree T)
{
if(T == NULL) return 0;
else
{
if((NodeCount(T->lchild)==NULL) && (NodeCount(T->rchild)==NULL))
return 1;
else
return NodeCount(T->lchild) + NodeCount(T->rchild);
}
}
int main()
{
BiTree T;
CreatBiTree(&T);
if(T)
{
PreOrderTraverse(T);
printf("\n");
InOrderTraverse(T);
printf("\n");
PostOrderTraverse(T);
printf("\n");
}
printf("%d",NodeCount(T));
return 0;
}