L2-006 树的遍历 (25 point(s))
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。
输入格式:
输入第一行给出一个正整数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
思路: 数据结构,离散数学中学到过,使用中序和后序可以还原出一个二叉树,还原的过程中核心在于,根据后续的最后一个点(根节点)与中序中的点相对应,确定中序遍历的分界线。下一步的工作就是将分出来的左右两颗子树进一步还原。也就是递归的过程,递归的出口就是中序序列,或者后续序列用完了。这里我才用了vector作为容器存储,更加方便。
#include<iostream>
#include<vector>
#include<queue>using namespace std;struct node{int data;node * l;node * r;};node * create(vector<int> post, vector<int> in);
void Level(node *B, vector<int>& Le);int main(){int n;cin >> n;vector<int> post;vector<int> in;vector<int> Le;for(int i = 0; i < n; i++){int t;cin >> t;post.push_back(t);} for(int i = 0; i < n; i++){int t;cin >> t;in.push_back(t);}node * B = create(post,in);Level(B,Le);for(int i = 0; i < Le.size(); i++){if(i)cout<<" ";cout << Le[i];}return 0;
}
void Level(node *B, vector<int>& Le){queue<node*> q;if(B){q.push(B);while(!q.empty()){node * t = q.front();q.pop();Le.push_back(t->data);if(t->l){q.push(t->l);}if(t->r){q.push(t->r);}} }
}
node * create(vector<int> post, vector<int> in){//出口 if(post.size() ==0){return NULL;}node *B = new node;B->data = post.back();//找到根节点 int m = 0;for(m; in[m]!=post.back();m++);//左子树 vector<int> p_l(post.begin(),post.begin()+m);vector<int> in_l(in.begin(),in.begin()+m);//右子树 vector<int> p_r(post.begin()+m,post.end()-1);vector<int> in_r(in.begin()+m+1,in.end()); //递归执行 B->l = create(p_l,in_l);B->r = create(p_r,in_r);return B;
}
L2-006 树的遍历 (25 point(s))相关推荐
- 【CCCC】L2-006 树的遍历 (25分),根据后序与中序遍历建立二叉树(我讨厌树,系列1)
problem L2-006 树的遍历 (25分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤30), ...
- 1094 The Largest Generation (25 分)【难度: 一般 / 树的遍历】
https://pintia.cn/problem-sets/994805342720868352/problems/994805372601090048 很传统的树的遍历. #include< ...
- 1079. Total Sales of Supply Chain (25)-PAT甲级真题(dfs,bfs,树的遍历)
A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...
- PTA 03-树1 树的同构 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3 树的同构 (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右 ...
- l2-006 树的遍历
L2-006. 树的遍历 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历 ...
- PTA L2-006 树的遍历-二叉树的后序遍历+中序遍历,输出层序遍历 团体程序设计天梯赛-练习集...
L2-006 树的遍历 (25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤),是二叉树中结点的个 ...
- PTA L2-035 完全二叉树的层序遍历(树的遍历)
L2-035 完全二叉树的层序遍历 (25分) 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树.对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的 ...
- mysql 遍历_MySQL 实现树的遍历详解及简单实现示例
MySQL 实现树的遍历 经常在一个表中有父子关系的两个字段,比如empno与manager,这种结构中需要用到树的遍历.在Oracle 中可以使用connect by简单解决问题,但MySQL 5. ...
- 那些妖术——树的遍历
本文参加CSDN博客大赛,如果你喜欢请投一票,非常感谢! 这个方法有点邪门,和大家在课堂上学的有点不一样,所以blog的名字取得有点邪乎. 一般的程序员应聘技术类的笔试都会有一道题目,那就是树的遍历( ...
- LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历--递归,迭代--反向压栈--C++解法
LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历–递归,迭代–反向压栈–C++解法 LeetCode题解专栏:LeetCode题解 LeetC ...
最新文章
- Docker入门六部曲——Stack
- Format specifies type 'id' but the argument has type 'NSError *__autoreleasing *
- 一台mysql并发能力_mysql怎么支撑百万级并发-对于同一个表,MySQL支持多少个并发操作...
- 复利计算5.0——结对(总结)
- 拦截导弹(二分匹配)
- const int是什么类型_C++的const语义
- MySQL优化(三):优化数据库对象
- 带你彻底明白 Android Studio 打包混淆
- TextBox的样式改成Lable
- 数据库大作业预览-教室管理系统
- 多台欧姆龙PLC通过智能网关实现HTTP协议对接MES系统
- 美通企业日报 | 易车收到腾讯等私有化要约;沃尔玛中国推出快时尚品牌George...
- Xilinx VIVADO 中 DDR3(AXI4)的使用(3)模块封装
- <img> 的 title 和 alt 有什么区别
- UNI-APP在iOS系统中加载来源于微信公众号的文章时(html片段),某些图片显示不出来的问题解决
- 六款最佳、免费的网络延迟测试工具
- 不换门可以改开门的方向吗_防盗门可以更改开门方向吗?
- android广播 拦截短信,短信接口防刷信息推荐「多图」
- bzoj2144 跳跳棋
- A链接标签点击不会触发任何行为的写法