L2-006 树的遍历 (25 分)(树)

简介: L2-006 树的遍历 (25 分)(树)

给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。


输入格式:

输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。


输出格式:

在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。


输入样例:

1. 7
2. 2 3 1 5 7 6 4
3. 1 2 3 4 5 6 7

结尾无空行


输出样例:

4 1 6 3 5 7 2

结尾无空行


思路:根据题意建树,然后遍历

#include<iostream>
#include<queue>
using namespace std;
typedef struct node *tree;
struct node{
    tree left,right;
    int data;
};
int a[40],b[40],n;
tree build(int a[],int b[],int len)//根据后序和中序建树过程
{
    if(!len) return NULL;//空树
    int i;
    for(i=0;i<len;i++)
        if(b[i]==a[len-1]) break;//找到中序的根节点
    tree t=(tree)new(tree);//创建一个节点
    t->data=a[len-1];//根
    t->left=build(a,b,i);//左
    t->right=build(a+i,b+i+1,len-i-1);//右
    return t;
}
int main()
{
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];
    for(int i=0;i<n;i++) cin>>b[i];
    tree t=build(a,b,n);
    queue<tree>q;
    q.push(t);
    int f=0;
    while(!q.empty())//层次遍历
    {
        tree x=q.front();
        q.pop();
        if(f++) cout<<' ';//控制空格
        cout<<x->data;
        if(x->left) q.push(x->left);
        if(x->right) q.push(x->right);
    }
    return 0;
}
目录
相关文章
|
9天前
|
算法
树的遍历算法有哪些?
不同的遍历算法适用于不同的应用场景。深度优先搜索常用于搜索、路径查找等问题;广度优先搜索则在图的最短路径、层次相关的问题中较为常用;而二叉搜索树的遍历在数据排序、查找等方面有重要应用。
18 2
|
5月前
|
存储 关系型数据库 MySQL
B树和B+树的区别
B树和B+树的区别
65 1
|
6月前
|
存储 数据库 索引
B树与B+树区别
B树与B+树区别
1568 1
|
索引
一次区分 B树、B+树,B*树
一次区分 B树、B+树,B*树
91 0
|
存储 数据库 索引
B树和B+树的区别是什么呢?
B树和B+树的区别是什么呢?
137 0
|
6月前
|
存储 数据库 索引
B树与B+树的区别
B树与B+树的区别
|
6月前
|
NoSQL 容器 Kubernetes
树、二叉树、树的遍历、树的序列化
树、二叉树、树的遍历、树的序列化
|
存储 Java
(Java)数据结构之树与二叉树(二叉树的四种遍历,获取结点个数,获取叶子结点个数,获取高度,获取第k层结点个数,查找值为val的结点,判断一棵树是否为完全二叉树(详述,图文并茂)
树是一种非线性的数据结构,它是由n个(n&gt;=0)个有限节点组成一个具有层次关系的集合。它的形状像一颗倒挂的树,根在上,叶在下。
(Java)数据结构之树与二叉树(二叉树的四种遍历,获取结点个数,获取叶子结点个数,获取高度,获取第k层结点个数,查找值为val的结点,判断一棵树是否为完全二叉树(详述,图文并茂)
L2-011 玩转二叉树 (25 分)(树)
L2-011 玩转二叉树 (25 分)(树)
133 0