L2-006. 树的遍历

L2-006. 树的遍历

大家好,又见面了,我是全栈君。

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

输入格式:

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

输出格式:

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

输入样例:

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

输出样例:

4 1 6 3 5 7 2
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<vector>
#include<set>
#include<queue>
using namespace std;

const int N = 50 + 5;

struct node{
    int key, lchild, rchild;
    node(){
        lchild = rchild = 0;
    }
}Node[N];

vector<int> post, in;
int n, key, st;
void DFS(int &root, int ls, int lt, int is, int it){
    if(root == 0) root = ++st;
    int p = post[lt];
    Node[root].key = p;

    int pos = is;
    while(in[pos] != p) pos++;
    if(pos != is){
        DFS(Node[root].lchild, ls, ls + pos - is - 1, is, pos - 1);
    }
    if(pos != it){
        DFS(Node[root].rchild, ls + pos - is, lt - 1, pos + 1, it);
    }
}
void BFS(int root){
    int cnt = 0;
    queue<int> Q;
    Q.push(root);
    while(!Q.empty()){
        int tmp = Q.front(); Q.pop();
        printf("%d%c", Node[tmp].key, ++cnt == n?'\n':' ');
        if(Node[tmp].lchild){
            Q.push(Node[tmp].lchild);
        }
        if(Node[tmp].rchild){
            Q.push(Node[tmp].rchild);
        }
    }
}
int main(){
    scanf("%d", &n);
    for(int i = 0; i < n; i++){
        scanf("%d", &key);
        post.push_back(key);
    }
    for(int i = 0; i < n; i++){
        scanf("%d", &key);
        in.push_back(key);
    }
    int root = 0;
    st = 0;
    DFS(root, 0, n-1, 0, n-1);
    BFS(root);
}

 

转载于:https://www.cnblogs.com/Pretty9/p/8623828.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107626.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • tess4J 安装使用

    tess4J 安装使用直接引用maven测试报错主要原因是引入不了dlljava.lang.UnsatisfiedLinkError:找不到指定的模块。 atcom.sun.jna.Native.open(NativeMethod) atcom.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:288) atcom.sun.jna.Na…

    2022年4月28日
    57
  • MIUI刷Android原生,小米手机怎么刷安卓原生系统

    MIUI刷Android原生,小米手机怎么刷安卓原生系统小米手机自带的系统很好,但是很多人还是希望用安卓的原生系统,小米手机是支持刷机成为安卓原生系统的。那么小米手机怎么刷安卓原生系统呢?今天学习啦小编与大家分享下小米手机刷安卓原生系统的具体操作步骤,有需要的朋友不妨了解下。小米手机刷安卓原生系统方法下载工具包和线刷完整包,下载完成后解压,刷机工具点击下载MIUI最新版线刷Fastboot开发版完整包点击下载。(请检查文件后缀名是否为”.tgz”,如…

    2022年6月19日
    120
  • c语言小游戏百度云资源,c语言小游戏合集

    c语言小游戏百度云资源,c语言小游戏合集这是c语言小游戏合集下载,这是我用c语言写的程序,我在大三上学期的劳动成果展示。我的其他资源都是免费的,是对于c语言初学者的帮助比较大的,其中有数据结构,window编程。我也在学c语言,每当我写完一个程序,我都会免费发上来。软件介绍c语言小游戏合集是本人在网上搜集的C语言编写的经典小游戏的源码集合,有志于C游戏编程学习的朋友可以选用参考。软件说明100个比较经典的C语言代码分享给大家,我都加了注…

    2022年5月18日
    35
  • Java程序设计(面向对象)- 三大支柱「建议收藏」

    Java程序设计(面向对象)- 三大支柱「建议收藏」Java程序设计(面向对象)- 三大支柱

    2022年4月22日
    90
  • Linux网卡启动失败_restart电脑上哪个键

    Linux网卡启动失败_restart电脑上哪个键Linux重启网卡失败报错如下:Jobfornetwork.servicefailedbecausethecontrolprocessexitedwitherrorcode.See“systemctlstatusnetwork.service”and“journalctl-xe”fordetails.报错原因:network与NetworkManager冲突导致解决办法:[root@localhost~]#systemctlstopNe

    2025年11月23日
    4
  • httprunner(9)运行测试用例的方式总结「建议收藏」

    httprunner(9)运行测试用例的方式总结「建议收藏」前言用过pytest的小伙伴都知道,pytest的运行方式是非常丰富的,可以说是你想怎么运行怎么运行,想运行哪些运行哪些,那httprunner是否同样可以呢?运行用例的各种方式运行指定路径的用

    2022年7月30日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号