博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
L2-011. 玩转二叉树
阅读量:4113 次
发布时间:2019-05-25

本文共 1168 字,大约阅读时间需要 3 分钟。

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

输入格式:

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

输出格式:

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

输入样例:
71 2 3 4 5 6 74 1 3 2 6 5 7
输出样例:
4 6 1 7 5 3 2

思路:先建树,其实镜像反转就是在层次遍历的时候先遍历右子树,在遍历左子树。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;const int maxn=1010;int in_order[maxn];int per_order[maxn];int lch[maxn],rch[maxn];int n;int Build(int l1,int r1,int l2,int r2){ if(l1>r1) return 0; int root=per_order[l1]; int p=l2; while(in_order[p]!=root) p++; int cnt=p-l2; lch[root]=Build(l1+1,l1+cnt,l2,l2+cnt); rch[root]=Build(l1+cnt+1,r1,l2+cnt+1,r2); return root;}vector
ans;void bfs(int x){ queue
p; p.push(x); ans.push_back(x); while(!p.empty()) { int u=p.front(); p.pop(); if(rch[u]) { p.push(rch[u]); ans.push_back(rch[u]); } if(lch[u]) { p.push(lch[u]); ans.push_back(lch[u]); } }}int main(){ cin>>n; for(int i=0; i
>in_order[i]; for(int i=0; i
>per_order[i]; Build(0,n-1,0,n-1); bfs(per_order[0]); for(int i=0; i

转载地址:http://lfgsi.baihongyu.com/

你可能感兴趣的文章
OpenFeign学习(五):OpenFeign请求结果处理及重试控制
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
OpenFeign学习(七):Spring Cloud OpenFeign的使用
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>
XML生成(三):JDOM生成
查看>>
Ubuntu Could not open lock file /var/lib/dpkg/lock - open (13:Permission denied)
查看>>
collect2: ld returned 1 exit status
查看>>
C#入门
查看>>
查找最大值最小值
查看>>
C#中ColorDialog需点两次确定才会退出的问题
查看>>
数据库
查看>>
nginx反代 499 502 bad gateway 和timeout
查看>>
linux虚拟机安装tar.gz版jdk步骤详解
查看>>
python猜拳游戏
查看>>
python实现100以内自然数之和,偶数之和
查看>>
python数字逆序输出及多个print输出在同一行
查看>>
ESP8266 WIFI数传 Pixhaw折腾笔记
查看>>