先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数

简介: 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数

对于给定的二叉树,输出其先序序列、中序序列、后序序列并输出叶子结点数。

3279ed024610f3a313a05000469d6ef9.png


输入格式:

二叉树的先序遍历序列。

提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。


输出格式:

若是非空二叉树,则输出四行内容 第一行是二叉树的先序遍历序列; 第二行是二叉树的中序遍历序列; 第三行是二叉树的后序遍历序列; 第四行是叶子结点数;

若是空二叉树 只需输出叶子数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;
}




目录
相关文章
【LeetCode】105. 从前序与中序遍历序列构造二叉树
题目描述: 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例:
62 0
|
2月前
输入二叉树先序序列,输出先序,中序,后序序列
输入二叉树先序序列,输出先序,中序,后序序列
21 0
|
C++ 索引
从前序与中序遍历序列构造二叉树(C++实现)
从前序与中序遍历序列构造二叉树(C++实现)
96 1
|
C++ 索引
从中序与后序遍历序列构造二叉树(C++实现)
从中序与后序遍历序列构造二叉树(C++实现)
84 1
|
7月前
|
C++ 索引 Python
leetcode-105:从前序与中序遍历序列构造二叉树
leetcode-105:从前序与中序遍历序列构造二叉树
48 0
leetcode 106 从中序和后续遍历序列构造二叉树
leetcode 106 从中序和后续遍历序列构造二叉树
83 0
leetcode 106 从中序和后续遍历序列构造二叉树
【LeetCode】-- 105. 从前序与中序遍历序列构造二叉树
【LeetCode】-- 105. 从前序与中序遍历序列构造二叉树
139 0
【LeetCode】-- 105. 从前序与中序遍历序列构造二叉树