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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vue的安装和使用_vue-element

    vue的安装和使用_vue-element前言Vue(读音/vjuː/,类似于view)是一套用于构建前后端分离的框架。刚开始是由国内优秀选手尤雨溪开发出来的,目前是全球“最”流行的前端框架。使用vue开发网页很简单,并且技术生态环境完善

    2022年7月29日
  • 2021Eclipse安装教程

    2021Eclipse安装教程第一步下载:官网地址:https://www.eclipse.org/downloads/第二步:下载好后,双击安装包,运行第三步:选择版本运行后有很多版本可供选择EclipseIDEforJavaDevelopers是为java开发的EclipseIDEforJavaEEDevelopers是为J2EE开发的EclipseforRCP/Plug-inDevelopers是为RCP和插件开发的EclipseIDEforC/C++Developers

    2022年5月10日
  • 信息采集技术概述

    信息采集技术概述第一节、信息采集技术概述信息采集技术主要指将外部模拟世界的各种模拟量,通过各种传感元件进行转换后,再经信号调理、采样、编码、传输等操作,最后送到控制器进行信息处理或存储的操作。信息采集所遵循的原则——保证信息采集质量的基本要求(一)准:数据如果不准,这样的采集来的数据对于应用目标和工作需求是完全没有意义的。(二)快(实时):信息从发生到被采集的时间间隔越短越好,因为基本上目标的实现是有时间…

    2022年6月22日
  • 怎样快速在线将pdf文件转换成word

    怎样快速在线将pdf文件转换成word免费pdf转word在线转换器在办公环境下如何将PDF转换成Word,是不少上班族普遍需要了解的问题之一。面对上百份需要处理的文档,其实否不用安装专业的PDF转Word转换器,借助免费PDF转Word在线转换器就能轻松帮你搞定PDF转Word问题。pdf在线转换成wordhttp://app.xunjiepdf.com   pdf word在线转换器最新发布的迅捷免费pdf转word

    2022年6月4日
  • cookie登录知乎「建议收藏」

    用cookie登录个人知乎主页步骤:1、用自己账号登录知乎,然后复制下来自己的cookie信息。2、用request.get(url,headers=headers)把cookie传入get请求中3、用BeautifulSoup匹配内容一、用自己账号登录知乎,获取自己的cookie信息。二、构造请求函数,并把cookie信息加入…

    2022年4月6日
  • onedrive申请1T免费空间_drive百度云

    onedrive申请1T免费空间_drive百度云微软推出学生活动。教育网邮箱账户可以免费领取onedrive1T容量,免费获取OFFICE365帐号。首先我们要到https://xkx.me/领取一个可以获得福利的临时邮箱。(最好输入一个ID/前缀)提示:通常你能在5分钟内收到邮件。然后打开https://www.microsoft.com/en-us/education/products/office?tab=students这时注意了,一定要等这个网站完全加载完再输入邮箱!!!!!也就是不能让网站处于下图的一种.

    2022年9月4日

发表回复

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

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