PAT甲级1020变体:已知二叉树层序+中序序列,求后序遍历序列

  • 题目
    • 输入格式
    • 输出格式
    • 输入样例
    • 输出样例
    • 代码

题目

已知二叉树层序+中序序列,求后序遍历序列。

输入格式

第一行给出该二叉树的节点总数;第二行给出层序遍历序列;第三行给出中序遍历序列。每个数用空格隔开。

输出格式

给出后序遍历序列。每个数用空格隔开,且行尾没有多余空格。

输入样例

7
4 1 6 3 5 7 2
1 2 3 4 5 6 7

输出样例

2 3 1 5 7 6 4

代码

#include <bits/stdc++.h>
using namespace std;
const int maxn=50;
int level[maxn], in[maxn];
int n;
struct node {int data;int lchild;int rchild;
}Node[maxn];
int index=0;
int newNode(int v){Node[index].data=v;Node[index].lchild=-1;Node[index].rchild=-1;return index++;
}
int create(int levelL,int levelR,int inL,int inR){if(levelL>levelR) return -1;int i,k;for(i=levelL;i<=levelR;i++){bool flag=false;for(k=inL;k<=inR;k++){if(in[k]==level[i]){flag=true;break;}}if(flag) break;}int root=newNode(in[k]);// 左子树存在if(k>inL) Node[root].lchild=create(i+1,levelR,inL,k-1);// 右子树存在if(k<inR) Node[root].rchild=create(i+1,levelR,k+1,inR);return root;
}
int num=0;
void postorder(int root){if(root==-1){return;}postorder(Node[root].lchild);postorder(Node[root].rchild);printf("%d",Node[root].data);num++;if(num<n) printf(" ");
}
int main(){freopen("input.txt","r",stdin);scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&level[i]);}for(int i=0;i<n;i++){scanf("%d",&in[i]);}int root=create(0,n-1,0,n-1);postorder(root);return 0;
}

参考代码:
https://www.cnblogs.com/thesky/p/10614313.html
https://blog.csdn.net/gq__97/article/details/79523529

PAT甲级1020变体:已知二叉树层序+中序序列,求后序遍历序列相关推荐

  1. 数据结构----二叉树已知先序和中序遍历序列求后序遍历

    说明 通过先序和中序或者中序和后序我们可以还原出原始二叉树,但是通过先序和后序是无法还原出原始二叉树也即是说,只有通过先序和中序,或者中序和后序我们才可以唯一的确定一个二叉树. 例子一 已知先序和中序 ...

  2. 【算法】【树】已知先序中序序列求后序序列(详细解释)

    题目描述 如题所示,已知先序中序序列建树与求后序序列 算法原理 利用递归和分制的思想,找到当前树先序序列的根节点,然后找到对应中序序列的位置,然后根据根节点在中序序列中的位置来判断左右子树分别的位置, ...

  3. 已知前序中序,求后序

    已知二叉树的前序和中序,求其后序 例:前序(A B D G H C E I F J ) 中序(G D H B A E I C J F) 其后序为:G H D B I E J F C A 思路:先序的遍 ...

  4. POJ 2255 Tree Recovery(已知前序中序,求后序)

    1. 题目链接:http://poj.org/problem?id=2255 2. 题目大意: 给定二叉树的前序和中序序列,输出其后序序列 3. 思考过程: 4. AC代码 /*** @descrip ...

  5. 杭电1710 (已知二叉树前中序 求后序)

    #include "iostream" #include "stack" using namespace std; int result[1001]; int ...

  6. 已知二叉树前序中序,求后序代码实现

    思路: 平时做笔试题目时,都是先拿前序的首字母,去和中序的字母比较,然后把中序的分成两段,不停的遍历,直到长度等于一(即叶子节点). 例题 二叉树是一种常用的数据结构.我们可以用大写的英文字母表示二叉 ...

  7. 二叉树面试题:前中序求后序、中后序求前序

    在面试时,避免不了的会遇到一些数据结构的面试题,今天我们就来了解一下二叉树的经典面试题: 已知二叉树的前序遍历顺序为ABDCEGHF,中序遍历顺序为DBAGEHCF,求该二叉树的后序遍历. 还有: 已 ...

  8. PAT甲级1020 Tree Traversals:[C++题解]树的遍历、由中序序列和后序序列递归建树

    文章目录 题目分析 题目链接 题目分析 题意重述:给定一棵二叉树的后序遍历序列和中序遍历序列,让求层次遍历的序列. 分析: 后序遍历:先 左子树.右子树 ,最后再遍历根结点. 中序遍历:先左子树,再根 ...

  9. 已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法...

    已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法 #define N 10 //二叉树节点的个数 char postorderstr[]={};//后序序列 char i ...

最新文章

  1. 深入理解Oracle RAC 12c 笔记
  2. SAP RETAIL MM41 创建的商品主数据里为啥会有Vendor Char.按钮?
  3. C++学习笔记第二天:几个知识点
  4. BZOJ 1433 Luogu P2055 [ZJOI2009]假期的宿舍 匈牙利算法
  5. Linux—任务计划
  6. [react] 说说你对windowing的了解
  7. 网站部署nginx--uwsgi
  8. WIN7下访问ftp的方法
  9. HTML 转 PDF的两种实现方式
  10. nmake comment
  11. 关于PC上的护眼大师这个软件
  12. range,xrange,arange比较
  13. Python练习题答案: 第一步,成为百万富翁 - 汇率卡塔【难度:2级】--景越Python编程实例训练营,1000道上机题等你来挑战
  14. 渗透测试与漏洞扫描详解
  15. mysql 3个表左连接查询_MySQL数据库三个表的左连接查询(LEFT JOIN)
  16. java 测试网络_java Ping操作(测试网络)
  17. cassandra多个数据中心实现异地容灾
  18. Python判断指定日期是不是法定节假日
  19. 19、控件使用之图标旋转指示仪表盘显示
  20. Pytorch实现多层lstm

热门文章

  1. 笔记本硬盘读取测试软件,电脑硬盘怎样检测 电脑硬盘故障检测软件【详解】...
  2. 用JS实现PC端淘宝查看商品图片放大镜效果
  3. 未来低功耗计算机,一种低功耗计算机主板
  4. 如何购买一只基金?【赢利模型】
  5. vue 获取id元素_.vue组件中获取DOM元素问题
  6. html5 驾考 答题样式,考驾照答题软件
  7. K-Means聚类算法 — 算法原理、质心计算、距离度量、聚类效果评价及优缺点
  8. plsql 客户端字符集_plsql查看数据库字符集
  9. 华为起诉美国政府,曝其服务器曾被美国政府入侵
  10. 5.5 图层样式的复制和粘贴 [原创Ps教程]