题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456

题意:给出一个二叉树的结点数目n,后序遍历序列post,中序遍历序列in,求其层序遍历序列。

思路:首先给二叉树每个结点一个编号,按照层序遍历的顺序一次编号,即一个编号为i的结点其左子树根节点编号为2*i+1,其右子树根节点的编号为2*i+2(二叉树的根节点为0),因为30层的二叉树编号达到了2*30-1,不能直接用数组存,会爆空间。我们可以用优先队列和二元组pair来存,pair的first存结点编号,second存该结点的值。之后就暴力递归了,每次将根节点入队,然后依次对其左子树、右子树递归调用。

AC代码:

#include<bits/stdc++.h>
using namespace std; int post[],in[];
int n;
typedef pair<int,int> PII;
priority_queue<PII,vector<PII>,greater<PII> > pq; void getc(int l,int r,int root,int index){
if(l>r) return;
int i=l;
while(in[i]!=post[root]) ++i;
pq.push(make_pair(index,post[root]));
getc(l,i-,root--r+i,*index+);
getc(i+,r,root-,*index+);
} int main(){
scanf("%d",&n);
for(int i=;i<n;++i)
scanf("%d",&post[i]);
for(int i=;i<n;++i)
scanf("%d",&in[i]);
getc(,n-,n-,);
PII p=pq.top();
pq.pop();
printf("%d",p.second);
while(!pq.empty()){
p=pq.top();
pq.pop();
printf(" %d",p.second);
}
printf("\n");
return ;
}

pta l2-6(树的遍历)的更多相关文章

  1. PTA 7-10 树的遍历(二叉树基础、层序遍历、STL初体验之queue)

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

  2. PTA 7-3 树的遍历 (25分)

    PTA 7-3 树的遍历 (25分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点 ...

  3. PTA L2-006 树的遍历-二叉树的后序遍历+中序遍历,输出层序遍历 团体程序设计天梯赛-练习集

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

  4. 天梯 L2 树的遍历(已知后序中序求层序)

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

  5. L2-006 树的遍历 (25 分) (根据后序遍历与中序遍历建二叉树)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 L2-006 树的遍历 (25 分 ...

  6. javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题

    赫夫曼树及其应用 赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用. 最优二叉树(Huffman树) 1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支 ...

  7. PAT甲级专题|树的遍历

    PAT甲级专题-树的遍历 涉及知识点:树.建树.深度优先搜索.广度优先搜索.递归 甲级PTA 1004 输出每一层的结点,邻接表vector建树后.用dfs.bfs都可以边搜边存当前层的数据, #in ...

  8. 数据结构--树(遍历,红黑,B树)

    平时接触树还比较少,写一篇博文来积累一下树的相关知识. 很早之前在数据结构里面学的树的遍历. 前序遍历:根节点->左子树->右子树 中序遍历:左子树->根节点->右子树 后序遍 ...

  9. YTU 3023: 树的遍历

    原文链接:https://www.dreamwings.cn/ytu3023/2617.html 3023: 树的遍历 时间限制: 1 Sec  内存限制: 128 MB 提交: 3  解决: 2 题 ...

随机推荐

  1. 8. Object转Map,Map转Object

    法一:使用reflect进行转换 public static Object mapToObject(Map<String, Object> map, Class<?> bean ...

  2. 关于 HTTP

    HTTP是一种能够获取如 HTML 这样的网络资源的 protocol(通讯协议).它是在 Web 上进行数据交换的基础,是一种 client-server 协议,也就是说,请求通常是由像浏览器这样的 ...

  3. Oracle服务无法启动,报:Windows无法启动OracleOraDb10g_home1TNSListener服务,错误 1067:进程意外终止。

    运行配置和移植工具中的Net Configuration Assistant,进行监听程序配置.删除配置,然后重新配置. 切记 一定是先删除配置,再重新配置,而不是新建配置. 或者 打开Net Man ...

  4. pycharm 对数据库进行可视化操作

    https://blog.csdn.net/qq_24189933/article/details/75666243

  5. git-搭建企业git服务器

    1.安装 yum install git 2.增加用户 useradd git -d /home/git -g git 3.查看公钥鉴权文件是否存在  cat /home/git/.ssh/autho ...

  6. C++复习:异常

    异常处理机制专题 前言 1)异常是一种程序控制机制,与函数机制独立和互补     函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它依附于栈结构,却可以同时设置多个异常类型作 ...

  7. 10:处理 json

    json 通用的数据类型, 所有的语言都认识.json 是字符串.key-value 必须使用双引号1. loads() 和 dumps() 的使用 json.loads() 将 json 字符串转换 ...

  8. linux 3.10 的又一次hung

    最近又遇到一次hung,dmesg中堆栈如下: [176223.913270] ------------[ cut here ]------------ [ PID: at net/sched/sch ...

  9. javascript单线程那些事

    首先,说下为什么 JavaScript 是单线程? 总所周知,JavaScript是以单线程的方式运行的.说到线程就自然联想到进程.那它们有什么联系呢? 进程和线程都是操作系统的概念.进程是应用程序的 ...

  10. windows下如何查看端口,关闭端口,开启端口

    如何查看端口 在Windows 2000/XP/Server 2003中要查看端口,可以使用NETSTAT命令: “开始">"运行”>“cmd”,打开命令提示符窗口.在 ...