hihoCoder 1049 后序遍历 最详细的解题报告

题目来源:后序遍历

解题思路:开始时我只知道先通过先序、中序求出二叉树,然后再后序遍历二叉树,这当然也是一种解题思路,但是会做一些无用功,比如:计算二叉树。其实,可以直接通过先序序列和中序序列直接求出后序序列的。思路如下:

1、取先序序列的第一个节点为根节点;

2、在中序序列中找到根节点的下标,将中序序列分成left和right两部分;

3、根据left和right的长度计算出先序序列中的根节点的左右孩子;

4、依次递归计算出左孩子,右孩子,返回 左孩子+右孩子+根节点。

具体算法(Java版,直接AC)

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4 
 5     public static String post_order(String preOrder,String inOrder){
 6         if(preOrder.length()>0&&preOrder.length()==inOrder.length()){
 7             char root=preOrder.charAt(0); //获取根节点
 8             int index=inOrder.indexOf(root); //在中序序列中找出根节点的下标
 9             if(index!=-1){
10                 String left=inOrder.substring(0, index);//中序序列中左孩子串
11                 String right=inOrder.substring(index+1);//中序序列中右孩子串
12                 //递归计算并返回计算后的左孩子+右孩子+根节点
13                 return post_order(preOrder.substring(1, left.length()+1),left)
+post_order(preOrder.substring(left.length()+1),right)
+root; 14 } 15 } 16 return ""; 17 } 18 19 public static void main(String[] args) { 20 Scanner scanner=new Scanner(System.in); 21 System.out.println(post_order(scanner.next(),scanner.next())); 22 } 23 }
原文地址:https://www.cnblogs.com/pinxiong/p/4077900.html