POJ 2255 Tree Recovery(根据前中序遍历,求后序遍历)
来源:互联网 发布:洛阳智网网络和恒凯 编辑:程序博客网 时间:2024/06/06 09:55
题意:给出二叉树的前序遍历和中序遍历,求后序遍历。
NO.1:无需重建二叉树,可直接求出后序遍历结果。
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.util.Scanner;public class Main { private static String last = ""; // 保存后序遍历结果 private static void getLate(String before, String middle) { // 递归终点 if ("".equals(before) || "".equals(middle) || (middle.indexOf(before.charAt(0)) < 0)) { return; } char temp = before.charAt(0); // 获取根结点 int rootMiddleIndex = middle.indexOf(temp); // 获取根结点在中序遍历的位置下标 // 递归左子树 getLate(before.substring(1, rootMiddleIndex + 1), middle.substring(0, rootMiddleIndex)); // 递归右子树 getLate(before.substring(rootMiddleIndex + 1), middle.substring(rootMiddleIndex + 1)); // 后序遍历结果:左右中 last += temp; } public static void main(String[] args) { Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in))); PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out))); String before; String middle; while (in.hasNext()) { before = in.next(); middle = in.next(); last = ""; getLate(before, middle); out.println(last); } out.flush(); }}
NO.2 重建二叉树
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.util.Scanner;public class Main { private static String last; // 构建二叉树,并返回根节点 private static Node constructCore(String before, String middle) { if ("".equals(before) || "".equals(middle) || before.length() < 0) { return null; } Node root = new Node(); char temp = before.charAt(0); int rootMiddleIndex = middle.indexOf(temp); root.value = temp; root.left = constructCore(before.substring(1, rootMiddleIndex + 1), middle.substring(0, rootMiddleIndex)); root.right = constructCore(before.substring(rootMiddleIndex + 1), middle.substring(rootMiddleIndex + 1)); return root; } // 后序遍历 private static void lastOrder(Node root) { if (root == null) { return; } lastOrder(root.left); lastOrder(root.right); last += root.value; } public static void main(String[] args) { Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in))); PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out))); String before; String middle; while (in.hasNext()) { before = in.next(); middle = in.next(); Node root = constructCore(before, middle); // 重建之后的二叉树根结点 last = ""; lastOrder(root); out.println(last); } out.flush(); }}class Node { public Node left; public Node right; public char value;}
阅读全文
0 0
- POJ 2255 Tree Recovery(根据前中序遍历,求后序遍历)
- poj 2255 Tree Recovery(求后序遍历,二叉树)
- POJ 2255 Tree Recovery 二叉树遍历
- POJ 2255 Tree Recovery (二叉树遍历)
- Poj 2255 Tree Recovery【dfs遍历树】
- POJ 2255Tree Recovery 二叉树重建(根据前序遍历和中序遍历写出后序遍历)
- poj 2255 Tree Recovery(二叉树的遍历)
- POJ 2255 Tree Recovery(树的遍历)
- POJ 2255 Tree Recovery(二叉树遍历)
- poj 2255 Tree Recovery 树的遍历 简单string用法
- POJ 2255 Tree Recovery 二叉树的遍历
- POJ 2255 Tree Recovery 二叉树+遍历+递归
- POJ 2255 Tree Recovery 树的遍历 水题
- poj 2255 Tree Recovery (二叉树的顺序遍历)
- 536 - Tree Recovery(二叉树遍历)
- POJ 2255/hrbust 2022 Tree Recovery【dfs、二叉树的层次遍历】
- POJ2255-Tree Recovery 已知先序遍历和中序遍历求后序遍历
- Tree Recovery(过遍历确定二叉树结构)
- java从入门到精通
- JavaDay06--Homework(方法重载和重写的区别,构造方法,继承类)
- 查找指定元素在数组中的个数
- Delphi XE8环境下使用windows下API函数创建一个空白窗口
- 20171219
- POJ 2255 Tree Recovery(根据前中序遍历,求后序遍历)
- 2017 CCPC 秦皇岛 & ZOJ 3993
- 笔记-自编码器(Autoencoders)
- 数据整理
- 一张图认识安卓shape属性
- 一篇转自大神的关于23种设计模式的文档
- text mining and analytics学习笔记week2
- 自动调参(GridSearchCV)及数据降维(PCA)在人脸识别中的应用
- 使用myecplise连接sqlserver数据库的所见异常及实现细则