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

输入格式:

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

输出格式:

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

输入样例:

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

输出样例:

4 1 6 3 5 7 2

二叉树:

前(先)序遍历:根左右

中序遍历:左根右

后序遍历:左右根(最后一个为根节点)

层序遍历:BFS从上到下,从左到右

前三个可以通过递归实现,最后一个BFS。

传送门:

二叉树前序遍历、中序遍历、后序遍历、层序遍历的直观理解

代码:

 //L2-006 树的遍历-二叉树的后序遍历、中序遍历、层序遍历
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+; struct node{
int l,r;
}tree[maxn]; int beh[maxn],mid[maxn]; int build(int la,int ra,int lb,int rb)//la,ra为中序遍历的, lb,rb为后序遍历的
{
if(la>ra) return ;
int rt=beh[rb];//根节点为后序遍历的最后一个
int p1=la;
while(mid[p1]!=rt) p1++;//找到根节点的位置下标
int p2=p1-la;
tree[rt].l=build(la,p1-,lb,lb+p2-);//递归建左子树
tree[rt].r=build(p1+,ra,lb+p2,rb-);//递归建右子树
// cout<<rt<<endl;
return rt;//返回值为结束的根节点值
} void bfs(int x)//bfs求得层序遍历
{
vector<int> vec;
queue<int> que;
que.push(x);
while(!que.empty()){
int ret=que.front();
que.pop();
if(ret==) break;
vec.push_back(ret);
if(tree[ret].l!=){//左子树不为空
que.push(tree[ret].l);
}
if(tree[ret].r!=){//右子树不为空
que.push(tree[ret].r);
}
}
int l=vec.size();
for(int i=;i<l-;i++)
cout<<vec[i]<<" ";
cout<<vec[l-]<<endl;
} int main()
{
int n;
cin>>n;
for(int i=;i<=n;i++)
cin>>beh[i];
for(int i=;i<=n;i++)
cin>>mid[i];
build(,n,,n);//建树
bfs(beh[n]);
}

最新文章

  1. 数据库_MYSQL
  2. 你的指纹还安全吗? - BlackHat 2015 黑帽大会总结 day 2
  3. “CEPH浅析”系列之八——小结
  4. Map的基本用法(Java)
  5. sort DEMO
  6. Python 学习笔记 - 10.类(Class) 1
  7. iOS-CALayer实现简单进度条
  8. MyEclipse10 Tomcat7 JDK1.7 配置
  9. iOS设备per app vpn,什么是什么系统的要求,必须?
  10. 【BZOJ4237】稻草人(CDQ分治,单调栈)
  11. C#线程安全使用(五)
  12. 深入浅出RxJava(三:响应式的好处)
  13. python 将字节写入文本文件
  14. 《剑指offer》(第二版)Java实现
  15. Python防止sql注入
  16. The method getServletContext() is undefined for the type HttpServletRequest
  17. Spark之Scala学习
  18. vmvare安装系统提示vmci.sys 版本不正确解决方法
  19. intelliij jdea 的file没有setting的解决方法
  20. input输入框外联式样式控制不了字体

热门文章

  1. [实战篇入门]02-POI简单创建Excel
  2. 实现一个简单的Vue插件
  3. Oracle 导出空表的新方法(彻底解决)
  4. [LA3135]node形式的优先队列
  5. c语言目录操作总结
  6. ASP.NET MVC各个版本区别
  7. cookie、session、localstorage
  8. Tornado 安装及简单程序示例
  9. Coursera在线学习---第七节.支持向量机(SVM)
  10. FIS3 大白话【一】