二叉树中的前序,中序,后序
来源:互联网 发布:人工智能顶级杂志 编辑:程序博客网 时间:2024/06/03 11:18
akoj1088为例:
输出二叉树
Time Limit:1000MS Memory Limit:65536K
Total Submit:17 Accepted:8
Description
我们知道二叉树的先序序列和中序序列或者是中序和后序能够唯一确定一颗二叉树。现在给一颗二叉树的先序序列和中序序列,要求输出它的后序序列。
Input
多组测试数据,每组测试数据格式如下:
第一行为先序序列
第二行为中序序列
Output
输出该二叉树的后序序列。
Sample Input :
ABFCDGHEI
BFAGDHCIE
Sample Output :
FBGHDIECA
由于代码中添加了很多注释,这里就不细讲,直接上代码
package com.zlx.akoj;import java.util.Scanner;class Tree2 { StringBuffer postOrder = new StringBuffer(); //创建一个最终的存储结果 public StringBuffer getPostOrder() { return this.postOrder.reverse(); //由于递归了,所以必须将字符串逆序 } public void getPost(String preOrder, String midOrder) { if (preOrder.length() == 1 && midOrder.length() == 1) { postOrder.append(preOrder); //当只有一个字符时直接追加到字符串末尾 return; } char root = preOrder.charAt(0); //根节点 String preOrder_left = new String(); //前序的左子树 String preOrder_right = new String();//前序的右子树 String midOrder_left = new String();//中序的左子树 String midOrder_right = new String();//中序的右子树 postOrder.append(root); //追加根节点 int midOrder_root_index = midOrder.indexOf(root); //中序中查找根节点的位置 midOrder_left = midOrder.substring(0, midOrder_root_index); //中序的左子树 midOrder_right = midOrder.substring(midOrder_root_index + 1);//中序的右子树 preOrder = preOrder.substring(1); //前序去掉根节点 int midOrder_left_length = midOrder_left.length(); //中序的左子树长度 int index = -1; for (int i = 0; i < midOrder_left_length; i++) { int tmp = preOrder.indexOf(midOrder_left.charAt(i)); if (tmp > index) index = tmp; //前序中的左子树的最后一个节点的位置 } preOrder_left = preOrder.substring(0, index + 1); //前序的左子树 preOrder_right = preOrder.substring(index + 1); //前序的右子树 /* * 这里强调一下,因为我们是后序遍历 * 所以先右子树 * 再左子树 * 最后再根 * */ if (!preOrder_right.equals("") && !midOrder_right.equals("")) { //如果前序的右子树和中序中的右子树不为空 getPost(preOrder_right, midOrder_right); //递归查找子问题中的右子树 } if (!preOrder_left.equals("") && !midOrder_left.equals("")) { //同理 getPost(preOrder_left, midOrder_left); } }}public class e1088 { public static void main(String[] args) { Scanner cin = new Scanner(System.in); while (cin.hasNext()) { //下面主函数就不解释了 String pre = cin.next(); String mid = cin.next(); Tree2 tree2 = new Tree2(); tree2.getPost(pre, mid); System.out.println(tree2.getPostOrder()); } }}
0 0
- 二叉树中的前序,中序,后序
- 二叉树中,什么是前序,中序,后序
- C++编写数据结构中的二叉树(前序,中序,后序遍历)
- 已知二叉树的前序,中序,后序遍历中的两个,求另一个
- 二叉树·中序+前/后序遍历建树+前/中/后序遍历(链表)
- 前序创建二叉树+ 前序/中序/后序遍历二叉树
- 二叉树的前序、中序、后序遍历
- 二叉树的遍历(前序,中序,后序)
- 二叉树的遍历:前序、中序、后序
- 二叉树的前序、中序、后序遍历
- 二叉树遍历(前序,中序,后序)
- 二叉树遍历(前序,中序,后序)
- 二叉树的前序、中序、后序遍历
- 二叉树的前序,中序,后序遍历
- 二叉树利用中序+后序----->前序
- 二叉树的前序、中序、后序遍历
- 二叉树的前序,中序,后序遍历
- 前序、中序、后序二叉树遍历
- JavaScript动态设置滚动条高度
- unset 数组 json_encode 数据格式
- android获取系统权限小记
- Myeclipse 2015 stable 1.0 完美破解方法
- 算法-贪心
- 二叉树中的前序,中序,后序
- Openstack swift常见问题
- 二维码的实现
- chrome模拟手机客户端模拟器使用方法
- Android 如何判断设备是否联网以及WIFI 是否开启
- 欢迎使用CSDN-markdown编辑器
- 2015_04_14 动态代理小结
- mysql存储过程详解
- 最长回文