对于给定的二叉树,输出其先序序列、中序序列、后序序列并输出叶子结点数。
输入格式:
二叉树的先序遍历序列。
提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。
输出格式:
若是非空二叉树,则输出四行内容 第一行是二叉树的先序遍历序列; 第二行是二叉树的中序遍历序列; 第三行是二叉树的后序遍历序列; 第四行是叶子结点数;
若是空二叉树 只需输出叶子数0
输入样例1:
FCA##DB###EHM###G##
结尾无空行
输出样例1:
1. FCADBEHMG 2. ACBDFMHEG 3. ABDCMHGEF 4. 4
结尾无空行
输入样例2:
#
结尾无空行
输出样例2:
0
#include<bits/stdc++.h> using namespace std; typedef struct node *tree; struct node{ tree left,right; char data; }; int k; tree build() { char ch; cin>>ch; tree t=(tree)new(tree); if(ch=='#') t=NULL; else { t->data=ch; t->left=build(); t->right=build(); if(t->left==NULL&&t->right==NULL) k++; } return t; } void xian(tree t) { if(t) { cout<<t->data; xian(t->left); xian(t->right); } } void zhong(tree t) { if(t) { zhong(t->left); cout<<t->data; zhong(t->right); } } void hou(tree t) { if(t) { hou(t->left); hou(t->right); cout<<t->data; } } int main() { tree t=build(); if(t) { xian(t); cout<<endl; zhong(t); cout<<endl; hou(t); cout<<endl; } cout<<k; return 0; }