import java.util.Scanner;

import java.util.Stack;

/**

* @Author WaleGarrett

* @Date 2020/9/5 12:02

*/

/**

* 根据前序遍历和中序遍历来构建一棵树

* 进栈的顺序对应前序遍历的顺序,出栈的顺序对应中序遍历的顺序

*/

public class PAT_1086 {

static int[] preorder;

static int[] inorder;

public static void main(String[] args) {

Scanner scanner=new Scanner(System.in);

Stacksta=new Stack<>();

int n=scanner.nextInt();

scanner.nextLine();//读取上一行的换行符

preorder=new int[n];

inorder=new int[n];

int precnt=0,incnt=0;

n*=2;

while(n!=0){

String s=scanner.nextLine();

// System.out.println(s);

if(s.length()>4){//push操作

String values=s.substring(5);

int value=Integer.parseInt(values);

sta.push(value);

preorder[precnt++]=value;

}else{//pop操作

int value=sta.peek();

sta.pop();

inorder[incnt++]=value;

}

n--;

}

TreeNode root=createTree(0,precnt-1,0,incnt-1);//根据前序遍历序列和中序遍历序列构建二叉树

System.out.println(postOrder(root," ").trim());

}

public static TreeNode createTree(int prel,int prer,int inl,int inr){

if(prel>prer)//叶子结点

return null;

TreeNode root=new TreeNode();

root.value=preorder[prel];

int position=0;

for(int i=inl;i<=inr;i++){

if(preorder[prel]==inorder[i]){

position=i;

break;

}

}

int inlcnt=position-inl;

root.left=createTree(prel+1,prel+inlcnt,inl,position-1);

root.right=createTree(prel+inlcnt+1,prer,position+1,inr);

return root;

}

public static String postOrder(TreeNode root,String result){

if(root.left!=null)

result=postOrder(root.left,result);

if(root.right!=null)

result=postOrder(root.right,result);

result=result+root.value+" ";

return result;

}

}

class TreeNode{

TreeNode left;

TreeNode right;

int value;

public TreeNode(){

left=right=null;

value=-1;

}

public TreeNode(int value){

this.value=value;

left=right=null;

}

}

java语言构造顺序树_PAT-1086(Tree Traversals Again)Java语言实现+根据中序和前序遍历构建树并且给出后序遍历序列...相关推荐

  1. PAT甲级1086 Tree Traversals Again:[C++题解]二叉树中序序列、栈、求后序遍历

    文章目录 题目分析 题目链接 题目分析 分析: 给定栈模拟的二叉树的中序序列. 我们可以发现一些性质: 1 第一个值是根结点. 2 对于所有的push操作,如果上一个是push,该结点就是上一个结点的 ...

  2. 1086 Tree Traversals Again (25分)

    1 题目 1086 Tree Traversals Again (25分) An inorder binary tree traversal can be implemented in a non-r ...

  3. 1086 Tree Traversals Again

    1. 这题的核心部分是,根据二叉树的先序序列和中序序列求后序序列.等于是在1020 Tree Traversals这一题的基础上,把怎么得到先序序列和中序序列的难度加大了,不是直接给出,而是要曲折一点 ...

  4. 【PAT (Advanced Level) Practice】1086 Tree Traversals Again (25 分)

    众所周知只有前序遍历和后序遍历是不可能推出中序遍历的,所以我就不废话了 由树的前序遍历和中序遍历可以推后序遍历 由树的中序遍历和后序遍历可以推前序遍历 #include <cstdio> ...

  5. 1086 Tree Traversals Again (25 分)【一般 / 建树 树的遍历】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805380754817024 首先要知道的是: 入栈顺序就是树的前序遍历的 ...

  6. C语言程序顺序结构1交换变量,如何将c语言中结构体内的所有类型变量的值输出来...

    教了多年<C程序设计>课程,大多学生觉的这门课程难学.其实,按照我们现在的教学大纲和教学要求,只要同学们掌握一些方法,克服心理上畏难.不轻言放弃,是完全可以学好的. <C 程序设计& ...

  7. java中将字符串顺序反传转_如何在Java中将字符串序列化的Erlang术语反序列化为JInterface对象?...

    我的接口系统提供了来自Erlang世界的结果,该结果发送了erlang术语的字符串表示形式,例如元组列表: [ {"key1" , ["AAA","B ...

  8. 树的应用:Tree Traversals Again

    题目来自:pta题目集(无邀请码打不开) 题目如下: An inorder binary tree traversal can be implemented in a non-recursive wa ...

  9. java设计一个顺序表类的成员函数,用java编写一个逐个输出顺序表中所有数据元素的成员函数...

    import java.util.ArrayList; import java.util.List; public class Test { /** * @param args */ public s ...

最新文章

  1. 树莓派视觉小车 -- 小球追踪(颜色追踪)(OpenCV色彩空间HSV)
  2. 刷脸背后,卷积神经网络的数学原理原来是这样的
  3. 传统外贸不好做,为什么不来做跨境电商?
  4. 迭代器模式源码解析(jdk+mybatis)
  5. 修改折半查找算法进行范围查找
  6. 探索 Word 2007 开发(四):上传图片
  7. ubuntun opencv 编译成64_19、OpenCV图像平滑处理
  8. 【Kafka】Kafka使用代码设置offset值
  9. 【STM32H7的DSP教程】第22章 DSP矩阵运算-放缩,乘法和转置矩阵
  10. 谷歌离开中国的三大原因四大后果
  11. 流程判断-三目运算-for循环
  12. python QQ聊天机器人,qqbot 使用简介
  13. 【题解】CF1418C Mortal Kombat Tower
  14. 2015浙大计算机考研,2015浙大计算机考研机试题解.pdf
  15. 英文文献翻译(白嫖版)
  16. Java学习-API
  17. 系统定时任务与延时任务
  18. 计算机有关书籍学习与推荐
  19. c语言state用法,常见设计模式的解析和实现—State模式
  20. 实时语义分割网络 BiSeNet(附代码解读)

热门文章

  1. node函数 python_成为Python大牛必须要掌握的高端语法(附链接代码)
  2. ruby 数据类型Symbol
  3. 阿里云发布“码上公益”平台 打造更高效透明的“科技公益”
  4. 傻瓜方法求集合的全部子集问题(java版)
  5. linux物理网卡地址没有,Linux更改网卡物理地址
  6. mysql库垂按照模块_前任都能看懂的分库分表方案
  7. wireshark----教你如何抓包
  8. softmax回归的简洁实现-09-p5
  9. 服务器san 虚拟化安装系统,在Hyper-V中安装iSCSI SAN服务器(下)
  10. idea开发vue项目时,使用@引入组件警告:Module is not installed