博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pta l2-11(玩转二叉树)
阅读量:6653 次
发布时间:2019-06-25

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

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

题意:给定二叉树的结点个数n,其前序遍历结果pre,中序遍历结果in,求其镜像二叉树的层序遍历结果。

思路:与pta l2-6基本一模一样,只不过是加了一个镜像,其实是一个意思,那道题见我另一篇博客:https://www.cnblogs.com/FrankChen831X/p/10542561.html。再来说说这道题,给二叉树每个结点一个编号,按照层序遍历的顺序依次编号,即一个编号为i的结点其左子树根节点编号为2*i+1,其右子树根节点的编号为2*i+2(二叉树的根节点为0),因为30层的二叉树编号达到了2*30-1,不能直接用数组存,会爆空间。我们可以用优先队列和二元组pair来存,pair的first存结点编号,second存该结点的值。之后就暴力递归了,与那道题不同的是这道题要求镜像之后的层序遍历结果,我们稍微换个角度来思考,只要将原来二叉树的右结点编号为2*i+1,左结点编号为2*i+2,其它的也递归进行,这样求得的层序遍历结果就是所求结果了。

AC代码:

#include
using namespace std;int n,pre[35],in[35];typedef pair
PII;priority_queue
,greater
> pq;void getc(int l,int r,int root,int index){ if(l>r) return; int i=l; while(in[i]!=pre[root]) ++i; pq.push(make_pair(index,pre[root])); getc(l,i-1,root+1,index*2+2); getc(i+1,r,root+i-l+1,index*2+1);}int main(){ scanf("%d",&n); for(int i=0;i

 

转载于:https://www.cnblogs.com/FrankChen831X/p/10544381.html

你可能感兴趣的文章
JSF生存指南P1
查看>>
《人月神话》阅读笔记03
查看>>
Python网络编程(1)---套接字, IPv4, 简单的Client/Server程序
查看>>
Linux下防火墙开启相关端口及查看已开启端口
查看>>
在多台服务器上简单实现Redis的数据主从复制
查看>>
关于Android Device Monitor工具在使用时所遇到的一些问题的解决方法
查看>>
10.SpringMVC注解式开发-处理器方法的参数
查看>>
MFC 自绘按钮 消息响应
查看>>
【C#小知识】C#中一些易混淆概念总结(八)---------解析接口 分类: ...
查看>>
数值类型的保留指定小数位
查看>>
mysql如何添加用户
查看>>
版本管理(转)
查看>>
C# checkboxlist的使用
查看>>
Java 学习笔记 五 -- Jedis
查看>>
02-CSS基础与进阶-day9_2018-09-12-21-02-40
查看>>
MyEclipse编辑xml文件没有提示
查看>>
Activity
查看>>
跨浏览器的事件对象——EventUtil
查看>>
自定义Toast
查看>>
CentOS 报no acceptable C compiler found in $PATH的解决办法
查看>>