这个题是利用树的基础,来模拟人为通过后中重构树的过程

有个小技巧在于,前中后遍历中,虽然所得结果的排序不同,但是子树所在的区域近乎相同,相差不大于1

对于后中重构中,我们很容易得到右子树的根,却难得到左子树的根,利用上述结论,可以间接求出右子树的长度,进而确定中序遍历中,左子树的位置,进而找到后序中,左子树的根具体在哪

L2-006 树的遍历 (25分)

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

输入格式:

输入第一行给出一个正整数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<iostream>
#include<cstdio>
#include<queue>
using namespace std;
#define MAXN 50
int hind[MAXN];
int mid[MAXN];
int n;
int index,lnum,rnum;
struct node
{int value;node *left;node *right;
}*T = NULL;
void Create(node *&R,int l,int r,int index)
{if(l>r) return;int p;R = new node;R->value = hind[index];R->left = NULL;R->right = NULL;for(int i = l; i <= r; i++) if(mid[i] == hind[index]) {p = i;break;};Create(R->right,p+1,r,index-1);Create(R->left,l,p-1,index+p-r-1);
}
void bfs()
{queue<node*> q;q.push(T);bool flag = false;while(!q.empty()){node* temp = q.front();q.pop();if(!flag){flag = true;printf("%d",temp->value);}else printf(" %d",temp->value);if(temp->left) q.push(temp->left);if(temp->right) q.push(temp->right);}
}
int main()
{cin>>n;for(int i = 0; i < n; i++) scanf("%d",&hind[i]);for(int i = 0; i < n; i++) scanf("%d",&mid[i]);Create(T,0,n-1,n-1);bfs();return 0;
}

利用后中遍历结果,重构二叉树相关推荐

  1. #swust oj978,979,980输出利用先序遍历创建的二叉树的中序遍历序列,后序遍历序列,层次遍历序

    输出利用先序遍历创建的二叉树的中序遍历序列,后序遍历序列,层次遍历序列 ***层次遍历思路: 1.初始化一个队列 2.把根节点指针入队 3.队列非空时:出队列取得一个结点指针,访问该节点,若该节点的左 ...

  2. 【必拿下系列】106. 从中序与后序遍历序列构造二叉树105从前序与中序遍历序列构造二叉树

    两题各自的链接放这里了: 链接: 106 链接: 105 106.从中序与后序遍历序列构造二叉树 如果你是不知道理论的,那就得仔细分析了, 举个例子: 输入:inorder = [9,3,15,20, ...

  3. LeetCode根据前序与中序、中序与后序,前序与后序遍历序列构建二叉树

    根据前序与中序遍历序列构建二叉树 LeetCode题目来源 1.1 题目描述 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是 ...

  4. 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...

  5. 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)

    引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...

  6. 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...

    二叉树的先序,中序,后序遍历以及线索二叉树的遍历 (2008-05-04 17:52:49) 标签: 杂谈 C++ 二叉树的先序,中序,后序遍历以及线索二叉树的遍历 头文件 //*********** ...

  7. Suzy找到实习了吗Day 18 | 二叉树进行中:513 找树左下角的值,112 路径总和 ,106.从中序与后序遍历序列构造二叉树

    513 找树左下角的值 solution # Definition for a binary tree node. # class TreeNode: # def __init__(self, val ...

  8. 72 中序遍历和后序遍历树构造二叉树

    原题网址:https://www.lintcode.com/problem/construct-binary-tree-from-inorder-and-postorder-traversal/des ...

  9. SWUSTOJ #978 输出利用先序遍历创建的二叉树的中序遍历序列

    SWUSTOJ #978 输出利用先序遍历创建的二叉树的中序遍历序列 题目 输入 输出 样例输入 样例输出 源代码 题目 利用先序递归遍历算法创建二叉树并输出该二叉树的中序遍历序列.先序递归遍历建立二 ...

  10. 971: 统计利用先序遍历创建的二叉树的深度

    971: 统计利用先序遍历创建的二叉树的深度 题目描述 利用先序递归遍历算法创建二叉树并计算该二叉树的深度.先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接 ...

最新文章

  1. mysql 删除顺序_mysql 添加字段、删除字段、调整字段顺序 转
  2. 使用ADO.NET查询和操作数据
  3. java syncr_JAVA基础—Synchronized线程同步机制
  4. Linux环境下Tomcat部署Solr4.x
  5. Gstreamer之QT程序无法找到Gstreamer1.0 pulseaudio插件(二十八)
  6. 吴彦祖计算机系统班 百度网盘,哪位吴彦祖(来自伸手党的夸赞) 有老詹的那场g6的百度云盘录像啊?我很需要...
  7. matlab仿真电子秤,基于51单片机电子秤的代码
  8. LaTex下载安装详解
  9. 阿⾥云Apsara Clouder云计算专项技能认证:云服务器ECS⼊门【 个⼈所得税年度应纳税额抵扣 3600(0成本)】
  10. centos 虚拟机出问题 Oh no,something has gone wrong! 解决方法
  11. Flak 解析json数据不完整?
  12. 也发个过VS3.0的MapHack
  13. flexbison编写语法分析器
  14. Android 插件化开发——宿主APP加载APK插件
  15. Hadoop的NameNode在启动时都做了哪些事情?源码解析
  16. 【高防服务器租用】这里有一份服务器租用攻略,请收好!
  17. Hive设置连接用户名和密码
  18. 系统架构设计师2009-2022历年综合知识、案例分析、论文真题及答案详细解析
  19. 计算机专业考中山大学经济学,2020中山大学801经济学考崩经验教训
  20. Ubuntu12.04下载编译android4.4源码

热门文章

  1. 【05】JSON笔记
  2. iOS开发_UI_AutoLayout
  3. java和C#的区别汇总
  4. jquery mysql jsp搜索功能_jquery实现的一个提前搜索功能
  5. 拓端tecdat|数据解锁职场女性潜力
  6. 原python基础概念整理_python基础知识脉络梳理总结
  7. js基础知识汇总12
  8. 清华大学操作系统OS学习(十三)——死锁、进程通信、信号、管道、消息队列和共享内存
  9. visual studio配置opencv
  10. python实现不使用额外空间去除重复元素