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

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

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

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;
}




目录
相关文章
|
3月前
输入二叉树先序序列,输出先序,中序,后序序列
输入二叉树先序序列,输出先序,中序,后序序列
28 0
|
3月前
|
存储 索引 Python
从中序与后序遍历序列构造二叉树
【10月更文挑战第13天】这段内容介绍了一种基于中序和后序遍历序列构建二叉树的方法。通过识别后序遍历中的根节点,并利用中序遍历划分左右子树,进而递归构建整棵树。文中提供了具体示例及Python代码实现,并分析了该方法的时间与空间复杂度。
127 0
21_从中序与后序遍历序列构造二叉树
21_从中序与后序遍历序列构造二叉树
|
C++ 索引
从前序与中序遍历序列构造二叉树(C++实现)
从前序与中序遍历序列构造二叉树(C++实现)
105 1
|
C++ 索引
从中序与后序遍历序列构造二叉树(C++实现)
从中序与后序遍历序列构造二叉树(C++实现)
89 1
leetcode 106 从中序和后续遍历序列构造二叉树
leetcode 106 从中序和后续遍历序列构造二叉树
89 0
leetcode 106 从中序和后续遍历序列构造二叉树
7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)
7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)
520 0
7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)