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

输入格式:
输入第一行给出一个正整数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))相关推荐

  1. 【CCCC】L2-006 树的遍历 (25分),根据后序与中序遍历建立二叉树(我讨厌树,系列1)

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

  2. 1094 The Largest Generation (25 分)【难度: 一般 / 树的遍历】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805372601090048 很传统的树的遍历. #include< ...

  3. 1079. Total Sales of Supply Chain (25)-PAT甲级真题(dfs,bfs,树的遍历)

    A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...

  4. PTA 03-树1 树的同构 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3 树的同构   (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右 ...

  5. l2-006 树的遍历

    L2-006. 树的遍历 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历 ...

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

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

  7. PTA L2-035 完全二叉树的层序遍历(树的遍历)

    L2-035 完全二叉树的层序遍历 (25分) 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树.对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的 ...

  8. mysql 遍历_MySQL 实现树的遍历详解及简单实现示例

    MySQL 实现树的遍历 经常在一个表中有父子关系的两个字段,比如empno与manager,这种结构中需要用到树的遍历.在Oracle 中可以使用connect by简单解决问题,但MySQL 5. ...

  9. 那些妖术——树的遍历

    本文参加CSDN博客大赛,如果你喜欢请投一票,非常感谢! 这个方法有点邪门,和大家在课堂上学的有点不一样,所以blog的名字取得有点邪乎. 一般的程序员应聘技术类的笔试都会有一道题目,那就是树的遍历( ...

  10. LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历--递归,迭代--反向压栈--C++解法

    LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历–递归,迭代–反向压栈–C++解法 LeetCode题解专栏:LeetCode题解 LeetC ...

最新文章

  1. Docker入门六部曲——Stack
  2. Format specifies type 'id' but the argument has type 'NSError *__autoreleasing *
  3. 一台mysql并发能力_mysql怎么支撑百万级并发-对于同一个表,MySQL支持多少个并发操作...
  4. 复利计算5.0——结对(总结)
  5. 拦截导弹(二分匹配)
  6. const int是什么类型_C++的const语义
  7. MySQL优化(三):优化数据库对象
  8. 带你彻底明白 Android Studio 打包混淆
  9. TextBox的样式改成Lable
  10. 数据库大作业预览-教室管理系统
  11. 多台欧姆龙PLC通过智能网关实现HTTP协议对接MES系统
  12. 美通企业日报 | 易车收到腾讯等私有化要约;沃尔玛中国推出快时尚品牌George...
  13. Xilinx VIVADO 中 DDR3(AXI4)的使用(3)模块封装
  14. <img> 的 title 和 alt 有什么区别
  15. UNI-APP在iOS系统中加载来源于微信公众号的文章时(html片段),某些图片显示不出来的问题解决
  16. 六款最佳、免费的网络延迟测试工具
  17. 不换门可以改开门的方向吗_防盗门可以更改开门方向吗?
  18. android广播 拦截短信,短信接口防刷信息推荐「多图」
  19. bzoj2144 跳跳棋
  20. A链接标签点击不会触发任何行为的写法

热门文章

  1. [转载] 民兵葛二蛋——第9集
  2. arduino UNO 点亮LED例程
  3. 3月10日 QR分解求非齐次线性,SVD分解求齐次线性最小二乘
  4. C#的GC机制(来自网摘复制,未整理)
  5. Python知识点-hashlib模块
  6. tomcat中开启SSL
  7. 采用C#泛型实现状态(State)模式
  8. 在存储过程中执行别的存储过程并获取其返回的结果集
  9. JavaScript的事件绑定及深入
  10. 初级程序员面试不靠谱指南(四)