二叉树中后序序列求先序序列
2015-12-12 17:58
162 查看
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String str1 = scanner.nextLine(); String str2 = scanner.nextLine(); showResult(str1, str2); System.out.println(); } } private static void showResult(String str1, String str2) { /* * str1是中序序列,str2是后序序列 * 特点:后序序列最后一位是root节点,中序序列以root节点分为左右子树 * 在第一个判断语句中str1.substring(0,index)是取其左子树,第二个参数str2.substring(0,index)也是取左子树 * ps:先后序列遍历都是先遍历完左子树,再遍历右子树 * 关于参数,是通过index找到的,左右子树出现在[0-length]之间 * 在if语句中index==0说明左子树为空,index==length-1说明右子树为空,故不需再递归 * 第一个if能够取出root节点左子树,第二个if能够取出root节点右子树。当节点的左子树为空时,进入第二个if; * 当节点的右子树为空时,进入第一个if。两者既相互独立,又相互协调 * * 中后序列求先序序列步骤就是: * 1).先从后序序列取出root节点 * 2).将中序序列分为左右子树,并判断左右子树是否为空 * 3).若非空,则递归 * 这样便使得每次print结果都是根节点,正好是先序序列 */ char chl = str2.charAt(str2.length() - 1); System.out.println(chl); int index = str1.indexOf(chl); if (index > 0) { showResult(str1.substring(0, index), str2.substring(0, index)); } if (index < str1.length() - 1) { showResult(str1.substring(index + 1), str2.substring(index, str2.length() - 1)); } } }
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- C语言二叉树的非递归遍历实例分析
- 使用C语言构建基本的二叉树数据结构
- C++非递归队列实现二叉树的广度优先遍历
- C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法
- C#非递归先序遍历二叉树实例
- C++非递归建立二叉树实例
- C语言实现找出二叉树中某个值的所有路径的方法
- C++实现二叉树遍历序列的求解方法
- C语言实现二叉树遍历的迭代算法
- 用C语言判断一个二叉树是否为另一个的子结构
- C++实现二叉树非递归遍历方法实例总结
- C++二叉树结构的建立与基本操作
- 深入遍历二叉树的各种操作详解(非递归遍历)
- JavaScript数据结构和算法之二叉树详解
- java使用归并删除法删除二叉树中节点的方法
- Java中二叉树数据结构的实现示例
- Java的二叉树排序以及遍历文件展示文本格式的文件树
- python数据结构之二叉树的建立实例
- python数据结构树和二叉树简介