L2-006 树的遍历

已知二叉树的前序和中序遍历,打印后序遍历 已知二叉树的前序和中序遍历,打印后序遍历,采用二叉树的非递归算法,分享给大家~~ 立即下载

L2-006 树的遍历 (25 分)

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

输入格式:

输入第一行给出一个正整数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

思路

  1. 建树:递归建树,后序数组的最后一个是根,在中序中找到根的位置,根前面的就是左子树,根后面的就是右子树,然后左右子树再重复同样的操作。
  2. 层次遍历输出:简单的BFS

AC代码

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <set>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 100010; 

struct Node {
    int L, R;
}node[35];
int post[35], in[35], n, root;
vector<int> v;

//post:la...ra  in:lb...rb
int buildtree(int la, int ra, int lb, int rb) {
    if(la > ra)
        return 0;
    int t = post[ra];
    int p = lb;
    while(in[p] != t)
        p++;
    node[t].L = buildtree(la, la + p - lb - 1, lb, p - 1);
    node[t].R = buildtree(la + p - lb, ra - 1, p + 1, rb);
    return t;
}

void bfs() {
    queue<int> q;
    q.push(root);
    while(!q.empty()) {
        int t = q.front();
        q.pop();
        v.push_back(t);
        if(node[t].L != 0)
            q.push(node[t].L);
        if(node[t].R != 0)
            q.push(node[t].R);
    }
}

int main() {
    // freopen("in.txt", "r",stdin);
    // freopen("out.txt", "w", stdout);
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) {
        scanf("%d", &post[i]);
    }
    for(int i = 1; i <= n; i++) {
        scanf("%d", &in[i]);
    }
    root = buildtree(1, n, 1, n);
    bfs();
    for(int i = 0; i < v.size() - 1; i++) {
        printf("%d ", v[i]);
    }
    printf("%d\n", v[v.size() - 1]);
    return 0;
}
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例 本文实例讲述了Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作。分享给大家供大家参考,具体如下: 实现一个功能:     输入:一颗二叉树的先序和中序遍历     输出:后续遍历 思想: 先序遍历中,第一个元素是树根     在中序遍历中找到树根,左边的是左子树 右边的是右子树 Python代码: # -*- coding:utf-8 -*- def fromFMtoL( mid ): global las #全局后序遍历 global fir #先序遍历 root = fir[0] #取出当前树根 fir = fir[1:] #取出树根后 先序遍历把根拿出 立即下载

相关推荐

【架构师面试-缓存与搜索-1】-缓存与缓存置换策略源码实现

1:什么是缓存 缓存:加速数据访问的存储,降低延迟(latency),提升吞吐量(Throughput)的利器。 1:缓存演进历史 1. 查库 2. ConcurrentHashMap 3. LRU 4. Guava Cache 5. 分布式缓存(redis,MemCache) 6. 多级缓存 2:在什么地方加缓存 缓存对于每个开发者来说是相当熟悉了,为了提高程序的性能我们会去加缓存,但是在什么地方加缓存,如何加缓存呢? 举个栗子:假设一个网站,需要提高性能,缓存可以放在浏览器,可以放

chongfa2008的博客 6436

7-4 树的遍历 (20 分)

7-4树的遍历(20分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。 输出格式: 在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。 输入样例: 7 2...

韩旭051的博客 6004

国产PLC实战:用汇川Easy320搞定TCP通信,手把手教你网口转串口控制设备

本文详细解析了如何使用汇川Easy320 PLC实现TCP通信与串口控制,解决工业自动化中设备间通信协议差异问题。通过实战案例和代码示例,展示了Easy320在协议转换、数据解析和串口转发中的高效应用,帮助工程师快速掌握网口转串口控制技术。

weixin_31774841的博客 497

PAT L2-006. 树的遍历

#include #include #include using namespace std; char pre[100],mid[100],post[100]; int s; int solo(int k,char *mid,char *post) { if(k return 0; pre[s++]=post[k-1]; char *p=strchr(mid,post[k-

Grit_ICPC的博客 2072

AI编程实战:用Spec Coding与Codex半小时重构全栈项目

这次我们来看一个能显著提升全栈开发效率的实战方法:利用 AI 编程工具 Codex 和 Spec Coding 工作流,将原本需要数周甚至一个月的全栈项目重构工期,压缩到半小时级别。这不是概念探讨,而是基于现有工具链的、可立即上手的工程实践。 对于前端开发者或全栈工程师而言,面对老旧项目重构、技术栈升级或从零搭建新项目时,最大的痛点往往是重复性、模式化的代码编写工作。手动编写 CRUD 接口、页面组件、状态管理和联调测试,耗时费力且容易出错。而 AI 辅助编程的核心价值,正是在于将开发者从这些“体力活”中解

weixin_33525298的博客 290

【网络】Ikuai中如何添加/更换虚拟机(图文)

Ikuai 添加虚拟机教程

qq_20623849的博客 6532

【题解 | 二叉树】给定二叉树的后序遍历和中序遍历,求层序遍历结果

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

翼同学 2060

树莓派34/100 - Pico读取MPU6050加速度和陀螺仪传感器数据

树莓派Pico连接MPU-6050模块(三轴陀螺仪+三轴加速度),读取运动姿态数据。

申龙斌的程序人生 5087

天梯L2-006 树的遍历

【代码】天梯L2-006 树的遍历。

m0_74958775的博客 246

高云FPGA系列教程(1):FPGA和ARM开发环境搭建

至此,高云FPGA和MCU开发环境就搭建完成了,整体还是比较简单的,几乎是一键完成,下一篇文章我们进行实际的FPGA和MCU开发。本文是高云FPGA系列教程的第1篇文章。

whik1194的博客 6184

清洁机器人之屏幕(中,大LCD)方案--ITE 联阳986x系列 soc显控芯片介绍

清洁机器人之屏幕(中,大LCD)方案--ITE 联阳986x系列 soc显控芯片介绍

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 2653

L2_006.树的遍历

L2_006.树的遍历 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。 输出格式: 在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。 输入样例: 7 2 3 1 5 7 6 ...

qq_41697164的博客 222

对称式目镜设计实例

对称式目镜设计实例

weixin_72050316的博客 1163

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

PTA-L2-006 树的遍历 (25分) 传送门 给出后序遍历和中序遍历,给出层次遍历。 我们知道后序遍历:左右根 中序遍历:左根右 所以后序遍历的最后一个就是根节点,然后我们在中序遍历中找到这个根节点,把左子树和右子树区分开来,然后递归即可。 递归过程中我们把构建出来。 最后输出。 bfs输出即可。 代码部分: #include <bits/stdc++.h> #define mst(a, n) memset(a, n, sizeof(a)) using namespace std; con

qq_44624316的博客 349

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

天梯赛 L2-006 树的遍历 是个人都能看懂

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

bf55vsvsv265的博客 1385

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

L2-006 树的遍历、L2-011 玩转二叉树

二叉树的三种遍历方式给定二叉树的后序遍历和中序遍历,复原二叉树,并写出层序遍历结果。首先后序遍历的最后一个位置的数一定是根结点。找到根结点在中序遍历中的位置,他的左边就是左子树上的结点,右边是右子树上的结点,那么不断重复这个过程,就可以复原二叉树。

Chilgyhf的博客 690

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

天梯赛 L2-006 树的遍历

这个题目就是考察建树,有两种写法,第一种比较简单,但只适合节点值1e6以内的,第二种使用结构体,地址分配。

m0_74237658的博客 433

【天梯赛:L2-006 树的遍历】

输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。树的遍历,后序遍历最后一个是根节点,在中序遍历中找到根节点划分左右子树,然后递归建树。层序遍历就是bfs用队列实现。给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。

2302_81229310的博客 490

L2-006 树的遍历 (25 分)

后序遍历是根在左右子树之后,所以对于整个后序遍历,根一定是最后一个。 在中序遍历中找到根的位置,根的左边有几个数,就说明左子树有几个元素;右子树以此类推。 在我们知道左右子树的个数之后我们回到后序遍历中,显然,遍历一定是[左子树][右子树][根]的顺序;又因为我们已经知道了左右子树的元素个数,所以可以通过这个条件定位左右子树的位置,再将左右子树作为单独的树来进行递归还原。

tcy今天长胖了吗的博客 281

PTA L2-006 树的遍历

PTA L2-006 树的遍历 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。 输出格式: 在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。 输入样例: 7 2 3 1 5 7...

旺崽的博客 3634

【PTA L2-006】树的遍历

                                 L2-006 树的遍历 (25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。 输出格式: 在一行中输出该树的层序遍历的序列...

Xylon的博客 900

天梯赛L2-006 树的遍历

2)标准 build 函数思路:先明确根节点(后序遍历的最后一个)—> 建立一个映射函数mp用来找到根节点在中序遍历中的位置 —>递归build函数,而左右子树的后序遍历的区间,我觉得是里面的一个难点。左右子树中序遍历的区间很好看出来,因为k是根节点,所以左子树的中序遍历区间就是【il,k-1】,右子树同理;而这个后序遍历的区间咋看呢?因为中序遍历是左子树—>根—>右子树,后序遍历是左子树—>右子树—>根,所以所以其左子树的pl延续下来,又因为中序遍历和后序遍历的长度肯定是一致的,

Ruially的博客 448

L2-006 树的遍历(数组 最劣解)

L2-006 树的遍历分数 25全屏浏览切换布局作者 陈越单位 浙江大学给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。

weixin_43894262的博客 221
上一篇: L2-005 集合相似度
下一篇: L2-008 最长对称子串
roMxx
博客等级 码龄12年 21粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值