玩转二叉树 (25 分) 知中序遍历和前序遍历,求做个镜面反转后的层序遍历

题目:

给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。

输入格式:

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

输出格式:

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

输入样例:

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

输出样例:

4 6 1 7 5 3 2

分析:

知道二叉树的知知中序遍历和前序遍历,求后序遍历
1.镜面反转:这个其实就只要在递归的时候先递归右树,再递归左树就好;
2.层序遍历:
在这里插入图片描述
不同的层放在一个vector中,每层可以区分开,在递归过程中,当做一个完全满二叉树来看,初始化vector数组为-1(表示二叉树节点都为Null),将每个值放在对应节点上,输出时,特判一下-1(即为空)的状态即可。
3.复习:创建vector容器的三种方式
(1)不指定元素个数:

vector<int>v;

(2)指定容器的大小

vector<int>v(10);

(3)指定容器的大小,且每个元素具有指定的初始值。

vector<double>(10,8.6);

4.利用递归,从前序一个个元素开始,root=1; 在中序中找到a[root]==b[i]a[root]==b[i]a[root]==b[i],
然后将中序分为两部分,b[1.....i−1]和b[i+1.....n]b[1.....i-1] 和b[i+1.....n]b[1.....i1]b[i+1.....n],然后分别遍历这两
部分,直到这两部分元素为0(x>y) 或1个(x==y);

  • 左子树 ,左子树范围必定在x到i-1之间,下一个根的位置在root+1
  • 右子树,右子树范围必定在i+1到y之间,根的位置就是(i-x)是左子树
    的大小,相当于root位置往后移左子树的个数再加一

前序遍历:根左右
中序遍历:左根右
后序遍历:左右根

AC代码:

#include <iostream>
#include<stdio.h>
#include <vector>
#define N 31
using namespace std;
int a[N],b[N];
vector<int> ve(100000,-1);
void build(int x,int y,int root,int step)/**x,y为左子树或右子树的区间,root为根节点,step为当前根节点的位置(满二叉树)*/
{if(x>y) return;ve[step]=a[root];/**记录当前根节点的位置*/int i;for(i=x;i<=y;++i){if(a[root]==b[i])break;}build(i+1,y,root+(i-x)+1,step*2+1);build(x,i-1,root+1,step*2+2);/**镜面这个其实就只要在递归的时候先递归右树,再递归左树就好*/
}
int main()
{int n;cin>>n;for(int i=1;i<=n;++i)cin>>b[i];for(int i=1;i<=n;++i)cin>>a[i];build(1,n,1,0);int cnt=0;for(int i=0;i<ve.size()&&cnt<=n;++i){if(ve[i]!=-1){if(i)cout<<" ";cout<<ve[i];++cnt;}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[JavaWeb-HTML]HTML标签_语义化标签

语义化标签&#xff1a; 语义化标签:html5中为了提高程序的可读性&#xff0c;提供了一些标签。1. <header>&#xff1a;页眉2. <footer>&#xff1a;页脚

使用dotnet Cli向nuget发布包

长话短说&#xff0c; 今天分享如何在nuget.org创建并发布.NET Standard package。前置安装勾选.NET Core开发套件的Visual Studio; 安装dotnet Cli从VS2017开始&#xff0c;dotnet Cli已经自动在.NET开发套件中被安装&#xff1b;使用SDK-style format&#xff08;SDK属性&…

STL中vector建立最大堆和最小堆

1.堆的概念&#xff1a; 堆是一种非线性结构&#xff0c;可以把堆看作一个数组&#xff0c;也可以被看作一个完全二叉树&#xff0c;通俗来讲堆其实就是利用完全二叉树的结构来维护的一维数组按照堆的特点可以把堆分为大顶堆和小顶堆 大顶堆&#xff1a;每个结点的值都大于或…

结合 AOP 轻松处理事件发布处理日志

结合 AOP 轻松处理事件发布处理日志Intro前段时间&#xff0c;实现了 EventBus 以及 EventQueue 基于 Event 的事件处理&#xff0c;但是没有做日志&#xff08;EventLog&#xff09;相关的部分&#xff0c;原本想增加两个接口&#xff0c; 处理事件发布日志和事件处理日志&…

[JavaWeb-HTML]HTML标签_块标签

div和span&#xff1a; * div:每一个div占满一整行。块级标签* span&#xff1a;文本信息在一行展示&#xff0c;行内标签 内联标签

关于堆的判断 (25 分)

题目&#xff1a; 将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种&#xff1a; x is the root&#xff1a;x是根结点&#xff1b; x and y are siblings&#xff1a;x和y是兄弟结点&#xff1b; x is the parent of y&am…

基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(三)

系列文章使用 abp cli 搭建项目给项目瘦身&#xff0c;让它跑起来完善与美化&#xff0c;Swagger登场数据访问和代码优先自定义仓储之增删改查统一规范API&#xff0c;包装返回模型再说Swagger&#xff0c;分组、描述、小绿锁接入GitHub&#xff0c;用JWT保护你的API异常处理和…

[JavaWeb-HTML]HTML标签_链接标签

链接标签&#xff1a; * a:定义一个超链接* 属性&#xff1a;* href&#xff1a;指定访问资源的URL(统一资源定位符)* target&#xff1a;指定打开资源的方式* _self:默认值&#xff0c;在当前页面打开* _blank&#xff1a;在空白页面打开示例代码如下: <!--超链接 a-->…

完全卸载软件及电脑软件残留

当我在控制面板的卸载软件里没有发现我要删软件的软件时&#xff0c;只找到了软件的部分安装目录删除&#xff0c;就会发生残留问题&#xff0c;导致软件依旧可以运行。 经过这么多次后&#xff0c;我就找到了我自认为的最优解。首先运行这个软件&#xff1b;之后打开windows任…

[JavaWeb-CSS]CSS基础选择器

选择器&#xff1a;筛选具有相似特征的元素 * 分类&#xff1a;1. 基础选择器1. id选择器&#xff1a;选择具体的id属性值的元素.建议在一个html页面中id值唯一* 语法&#xff1a;#id属性值{}2. 元素选择器&#xff1a;选择具有相同标签名称的元素* 语法&#xff1a; 标签名称{…

真的是计划赶不上变化吗?

「做事容易半途而废&#xff0c;缺乏毅力」&#xff0c;我想100个人里面有99个是这样。更加好玩的是&#xff0c;这99个人里面可能还有不少会劝说别人要坚持……所以&#xff0c;其实我们每个人心里都清楚&#xff0c;一件事情不会“自动完成”&#xff0c;只有靠自己坚持做下去…

关于解决Path被大改,无法直接编辑恢复的问题

为了给eclipse改版&#xff0c;不用更改API&#xff0c;我动了环境变量&#xff0c;因为我的环境变量名称是path&#xff0c;所以当给tomcatTomCAT安装以及使用详细解释配置环境时&#xff0c;我直接新建的Path&#xff0c;把原来的path覆盖掉了&#xff0c;而且在注册表里无法…

[JavaWeb-HTML]CSS与html结合方式

CSS的使用&#xff1a;CSS与html结合方式 1. 内联样式* 在标签内使用style属性指定css代码* 如&#xff1a;<div style"color:red;">hello css</div>2. 内部样式* 在head标签内&#xff0c;定义style标签&#xff0c;style标签的标签体内容就是css代码* …

Sql Server之旅——第十二站 对锁的初步认识

作为一个开发人员&#xff0c;锁机制也是我们程序员必须掌握的东西&#xff0c;很久之前在学习锁的时候&#xff0c;都是教科书上怎么说&#xff0c;然后我怎么背&#xff0c;缺少一个工具让我们眼见为实。。。如果这样的话&#xff0c;学习一个东西就很容易忘记。。。因为这些…

算法基础

目录枚举例题应用&#xff1a;模拟技巧递归$分治递归分治算法贪心常见题型与动态规划的区别例题&#xff1a;应用排序选择排序冒泡排序插入排序计数排序基数排序二分最大值最小化STL 的二分查找三分法最大化平均值&#xff08;01分数规划&#xff09;枚举 枚举&#xff08;英语…

ABP框架 v2.9发布!

ABP框架和ABP商业版2.9已经发布,这是3.0之前的最后一个版本! 这篇文章将涵盖本次发布中的新增内容.ABP框架2.9有哪些新增内容&#xff1f;你可以中GitHub的发行说明中看到所有的变更.这篇文章将只包括重要特征/变更.预编译Razor Pages在之前的版本, 预构建的页面(应用模块)和视…

[JavaWeb-CSS]CSS概述

CSS&#xff1a;页面美化和布局控制 1. 概念&#xff1a; Cascading Style Sheets 层叠样式表* 层叠&#xff1a;多个样式可以作用在同一个html的元素上&#xff0c;同时生效2. 好处&#xff1a;1. 功能强大2. 将内容展示和样式控制分离* 降低耦合度。解耦* 让分工协作更容易*…

2021—ICPC省赛冲刺

OI-wiki 知识点汇总 算法基础 数论 动态规划专题 数据结构专题 数据结构详细 搜索相关 字符串相关 今天看见了别人的整理模板的博客&#xff0c;膜拜&#xff0c;orz&#xff0c;先放上来回头慢慢学习%%%%% 啥都有 超全模板题 板板板 逐步完善中。。。。

最终选型 Blazor.Server:又快又稳!

书接上文&#xff0c;昨天我们快速的走了一遍wasm的开发流程&#xff08;我的『MVP.Blazor』快速创建与部署&#xff09;&#xff0c;总体来说还是很不错的&#xff0c;无论是从技术上&#xff0c;还是从开发上&#xff0c;重点是用C#来开启前端时代&#xff0c;可以开发SPA单页…

[JavaWeb-HTML]HTML标签(大部分常用标签介绍)

标签学习&#xff1a; 1. 文件标签&#xff1a;构成html最基本的标签* html:html文档的根标签* head&#xff1a;头标签。用于指定html文档的一些属性。引入外部的资源* title&#xff1a;标题标签。* body&#xff1a;体标签* <!DOCTYPE html>&#xff1a;html5中定义该…