博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【7-10 PAT】树的遍历
阅读量:4957 次
发布时间:2019-06-12

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

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

输入格式:

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

 

 

#include
#include
#include
using namespace std;const int maxn = 2e5 + 5;struct Node{ int val,l,r;}node[maxn];int tot = 0;int zhong[maxn],hou[maxn];int dfs(int len,int zhong[],int hou[]){ if(len <= 0) return -1; if(len == 1) { node[++tot].val = hou[1]; node[tot].l = node[tot].r = -1;// printf("len == 1 %d\n",tot); return tot; } node[++tot].val = hou[len];// printf("%d %d\n",tot,node[tot].val); int res = tot; int l; for(l = 1;l <= len;l++) if(zhong[l] == hou[len]) break; node[res].l = dfs(l-1,zhong,hou); node[res].r = dfs(len - l,zhong + l,hou + l - 1); return res;}void bfs(){ queue
que; que.push(1); while(!que.empty()) { int cur = que.front(); que.pop(); if(cur != 1) printf(" "); printf("%d",node[cur].val); if(node[cur].l != -1) que.push(node[cur].l); if(node[cur].r != -1) que.push(node[cur].r); }}int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&hou[i]); for(int i=1;i<=n;i++) scanf("%d",&zhong[i]); dfs(n,zhong,hou); bfs(); return 0;}

 

转载于:https://www.cnblogs.com/smallhester/p/10620204.html

你可能感兴趣的文章
jQuery easing
查看>>
shell之使用cut切割文本文件
查看>>
基于Metronic的Bootstrap开发框架经验总结(3)--下拉列表Select2插件的使用
查看>>
撤销操作
查看>>
sscanf在字符串中的一些使用
查看>>
[转]new一个Object对象占用多少内存?
查看>>
一步步教你Hadoop多节点集群安装配置
查看>>
JS_轮播案例
查看>>
【转】STM32 - 程序跳转、中断、开关总中断
查看>>
== & ===
查看>>
详解C#中的反射
查看>>
给java初学发者的一些建议,并对自身一年做一个总结。
查看>>
Android开发:Android虚拟机启动错误Can't find 'Linux version ' string in kernel image file
查看>>
2016.03.20
查看>>
href=#与href=javascriptvoid(0)的区别
查看>>
String 转化成java.sql.Date和java.sql.Time
查看>>
探寻读取文件的最快方法
查看>>
转:Eclipse中安装配置VSS
查看>>
[转]async & await 的前世今生(Updated)
查看>>
PostgreSQL本地化
查看>>