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


相关推荐

  • idea 2021 mybatis log plugin激活码(注册激活)

    (idea 2021 mybatis log plugin激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~F…

    2022年3月28日
    412
  • 三层开发中容易犯的错误(转)

    三层开发中容易犯的错误(转)

    2021年7月27日
    57
  • IDEA2021 3.1 激活码(最新序列号破解)

    IDEA2021 3.1 激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    987
  • jsp实现图书管理系统

    jsp实现图书管理系统图书管理系统根据对图书管理业务的分析 给出图书管理系统功能设计如下 1 系统管理模块 系统管理包括用户登录 退出功能 2 借书规则管理模块 管理员可以对借书规则 可借多少天 可借多少本 超期一天罚款多少 信息进行修改和查看 读者可以查看借书规则 3 图书类型管理模块 管理员可以对图书分类信息进行增删改查操作 图书分类名称唯一 4 图书信息管理模块 管理员可以对图书信息进行增删改查操作 读者可以查看图书信息 5 读者信息管理模块 管理员可以对读者信息进行增删改查操作 读者登录后可以查看个人信息 以

    2025年11月16日
    6
  • Django(41)详解异步任务框架Celery「建议收藏」

    Django(41)详解异步任务框架Celery「建议收藏」celery介绍Celery是由Python开发、简单、灵活、可靠的分布式任务队列,是一个处理异步任务的框架,其本质是生产者消费者模型,生产者发送任务到消息队列,消费者负责处理任务。Celery侧重

    2022年7月30日
    9
  • 超详细的MySQL三万字总结[通俗易懂]

    超详细的MySQL三万字总结[通俗易懂]文章目录MySQL基础数据库的介绍数据库概述数据的存储方式数据库的概念常见数据库排行榜数据库的安装与卸载数据库的安装数据库的卸载数据库服务的启动与登录Windows服务方式启动DOS命令方式启动控制台连接数据库SQLyog图形化工具——客户端使用SQLyog登录数据库数据库管理系统数据库管理系统、数据库和表的关系SQL的概念什么是SQLSQL作用SQL语句分类MySQL的语法DDL操作数据库创建数据库创建数据库的几种方式查看数据库修改数据库删除数据库使用数据库DDL操作表结构创建表M

    2022年5月13日
    41

发表回复

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

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