题目:

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

输入格式:

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

思路:

前序:根左右

后序:左右根

中序:左根右

依然是区间递归:由后序遍历的规则可知,一个树的遍历的最后一位就是该树的根结点,所以我们只需在中序遍历中找到该根结点即可在中序遍历中分出左右子树,然后左右子树再分别进行递归。如果题目要求的是先序遍历的话只需每层遍历输出根节点即可,但是题目要求输出层序遍历。我们可以建立一个数组level,初值全部设为-1,表示没有结点,将每一层的根节点存入数组的相应位置,然后按顺序输出非-1的元素就能得到层序遍历。

题目中的二叉树不一定是完全二叉树,比如样例中的二叉树如下图中黑色实线。代码中左子树在数组level中存储根节点的位置是index*2+1,右子树是index*2+2,index其实是这两个子树对应的上一层的的根节点。下图红字代表这些结点(没有结点就是-1)在level中存放的位置。比如题目中这个树在level中应该是这样存储的:4 1 6 -1 3 5 7 -1 -1 2 -1 -1 -1 -1……,level这个数组可以理解为代表完全二叉树,相当于要把存在的结点往上面填。

思路来自:https://blog.csdn.net/liuchuo/article/details/52136236

上代码:

#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;
vector<int> post(),in(),level(,-);
//后序中的最后一个结点是根结点root,在中序中从start到end移动i找到这个根结点的位置,i以左是左子树,以右是右子树
void pre(int start,int end,int root,int index)//index是根节点在数组level中存放的位置
{
if(start>end) return ;//当一个结点就是一个树时,start==end;将这个最底层的叶子结点存入level后就应该结束递归了。
int i=start;
while(i<end&&in[i]!=post[root]) i++;
level[index]=post[root];
pre(start,i-,root-(end-i)-,index*+);
pre(i+,end,root-,index*+);
} int main()
{
int n;
cin>>n;
for(int i=;i<n;i++)
{
cin>>post[i];
}
for(int i=;i<n;i++)
{
cin>>in[i];
}
pre(,n-,n-,);
int cnt=;
for(int i=;i<;i++)
{
if(level[i]!=-&&cnt<n-)
{
cout<<level[i]<<" ";
cnt++;
}else if(level[i]!=-){
cout<<level[i];
break;
}
}
return ;
}

L2-006 树的遍历 (后序中序求层序)的更多相关文章

  1. PAT Advanced 1138 Postorder Traversal (25) [树的遍历,前序中序转后序]

    题目 Suppose that all the keys in a binary tree are distinct positive integers. Given the preorder and ...

  2. c++树,知道前序和中序求后序遍历

    经常有面试题就是知道一棵树的前序遍历和中序遍历让你写出后序遍历,这个慢慢画是能画出来的,但是要很快的弄出来还是要懂原理. 首先说一下三种遍历:所谓的前序后序和中序都是遍历时遍历根节点的顺序.子树的话依 ...

  3. c++中二叉树的先序中序后序遍历

    c++中二叉树的先(前)序.中序.后序遍历 讲解版 首先先看一个遍历的定义(源自度娘): 所谓遍历(Traversal),是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问.访问结点所做的 ...

  4. PAT Advanced 1020 Tree Traversals (25) [⼆叉树的遍历,后序中序转层序]

    题目 Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder an ...

  5. 已知前序(后序)遍历序列和中序遍历序列构建二叉树(Leetcode相关题目)

    1.文字描述: 已知一颗二叉树的前序(后序)遍历序列和中序遍历序列,如何构建这棵二叉树? 以前序为例子: 前序遍历序列:ABCDEF 中序遍历序列:CBDAEF 前序遍历先访问根节点,因此前序遍历序列 ...

  6. 二叉树 遍历 先序 中序 后序 深度 广度 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. PAT A1020——已知后序中序遍历求层序遍历

    1020 Tree Traversals Suppose that all the keys in a binary tree are distinct positive integers. Give ...

  8. PAT甲级|1151 LCA in a Binary Tree 先序中序遍历建树 lca

    给定先序中序遍历的序列,可以确定一颗唯一的树 先序遍历第一个遍历到的是根,中序遍历确定左右子树 查结点a和结点b的最近公共祖先,简单lca思路: 1.如果a和b分别在当前根的左右子树,当前的根就是最近 ...

  9. 48. leetcode 105题 由树的前序序列和中序序列构建树结构

    leetcode 105题,由树的前序序列和中序序列构建树结构.详细解答参考<剑指offer>page56. 先序遍历结果的第一个节点为根节点,在中序遍历结果中找到根节点的位置.然后就可以 ...

  10. 给出 中序&后序 序列 建树;给出 先序&中序 序列 建树

    已知 中序&后序  建立二叉树: SDUT 1489 Description  已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历 Input  输入数据有多组,第一行是一个整数t (t& ...

随机推荐

  1. OSMC Vs. OpenELEC Vs. LibreELEC – Kodi Operating System Comparison

    Kodi's two slim-and-trim kid brothers LibreELEC and OpenELEC were once great solutions for getting t ...

  2. pmp心得

    我报名比较晚,等缴费最后期限,才缴费,下定决心,开始正式的备考. 我的工作比较忙,备考时间特比较短,从拿到书到考试只有二个月了,心理慌慌的,期间还有一门其他的考试,在5月底,实际时间只能有20来天. ...

  3. springboot中filter的配置和顺序执行

    项目结构 springboot版本 <parent> <groupId>org.springframework.boot</groupId> <artifac ...

  4. C# winfrom Datagridview控件下拉菜单

    拖拽一个datagridview放在界面,编辑列把下来菜单那列ColumnType设置成DataGridViewComboBoxColumn 然后在数据一栏的Items可以写下来菜单的内容也可以后台代 ...

  5. Asp.net core 项目实战 新闻网站+后台 源码、设计原理 、视频教程

    首先说明,视频教程.源码并非本人原创 本人将项目分割开,并写了一些说明. 该视频教程 地址  https://study.163.com/course/courseMain.htm?courseId= ...

  6. Android studio ocr初级app开发问题汇总(含工程代码)

    博客第一篇文章,稍作修改,增加文字介绍 开发目的 最近由于某些需求,需要在Android手机端实现OCR功能,大致为通过手机照相,识别出相片中的中文信息字段.但是由于新手光环+流程不熟悉,遇到了各种各 ...

  7. 理解单链表的反转(java实现)

    要求很简单,输入一个链表,反转链表后,输出新链表的表头.   反转链表是有2种方法(递归法,遍历法)实现的,面试官最爱考察的算法无非是斐波那契数列和单链表反转,递归方法实现链表反转比较优雅,但是对于不 ...

  8. 阿里嘉年华ADC Workshop PPT分享

    前段时间在阿里嘉年华的workshop做了一些关于memcache高可用和MMM Mod的分享. 下面是相关的PPT,特此分享. ADC官网直接在线查看:http://adc.alibabatech. ...

  9. SOJ 1017 Power of Cryptography 库函数精度

    Background Current work in cryptography involves (among other things) large prime numbers and comput ...

  10. P1395 会议

    题目描述 有一个村庄居住着n个村民,有n-1条路径使得这n个村民的家联通,每条路径的长度都为1.现在村长希望在某个村民家中召开一场会议,村长希望所有村民到会议地点的距离之和最小,那么村长应该要把会议地 ...