问题是:给出一棵二叉树的前序和中序遍历的结果,还原这棵二叉树并输出其后序遍历的结果。
先序遍历结果为=‘根节点’+‘左子树的前序遍历’+‘右子树的前序遍历’!,而在这里体现出来就是‘A'+‘BDEGH’+‘CFIJ’
中序遍历结果为=‘左子树的中序遍历’+‘根节点’+‘右子树的中序遍历’!,而在这里也就是‘DBGEH’+‘A’+‘CIJF’
然而我们可以递归处理左子树的先序遍历”BDEGH“和中序遍历”DBGEH“
右子树的先序遍历”CFIJ“和中序遍历”CIJF“
Java实现:
package com.zhangyao;
import java.util.Scanner;
public class postOrder {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String str1=null,str2=null;
str1=in.next();
str2=in.next();
postOrderQ(str1,str2);
}
public static void postOrderQ(String str1,String str2){
if(str1.isEmpty()){
return;
}
int k=-1;
String root=str1.substring(0,1); // 取出根节点
for(char cc:str2.toCharArray()){
if(cc==root.toCharArray()[0]){
k=str2.indexOf(cc);
break;
}
}
String preStrLeft=str1.substring(1, k+1);
String midStrLeft=str2.substring(0,k);
String preStrRight=str1.substring(k+1);
String midStrRight=str2.substring(k+1);
postOrderQ(preStrLeft,midStrLeft); // 处理左子树
postOrderQ(preStrRight,midStrRight); // 处理右子树
System.out.print(root);
}
}