题目描述
二叉树的前序、中序、后序遍历的定义:
前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;
中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;
后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。
给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。输入
两个字符串,其长度n均小于等于26。
第一行为前序遍历,第二行为中序遍历。
二叉树中的结点名称以大写字母表示:A,B,C....最多26个结点。输出
输入样例可能有多组,对于每组测试样例,
输出一行,为后序遍历的字符串。样例输入
ABC CBA ABCDEFG DCBAEFG样例输出
CBA DCBGFEA
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()) {
String pre = in.next();
String mid = in.next();
String ans = postOrder(pre,mid);
System.out.println(ans);
}
in.close();
}
private static String postOrder(String pre, String mid) {
// TODO Auto-generated method stub
if(pre.length()==1)return pre;
else if(pre.length()==0)return "";
String root,left,right;
root = String.valueOf(pre.charAt(0));
int m = mid.indexOf(root);
left = postOrder(pre.substring(1,m+1),mid.substring(0,m));
right = postOrder(pre.substring(m+1),mid.substring(m+1));
return left+right+root;
}
}
已知后序,中序,求前序
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()) {
String post = in.next();
String mid = in.next();
String ans = preOrder(post,mid);
System.out.println(ans);
}
in.close();
}
private static String preOrder(String post, String mid) {
// TODO Auto-generated method stub
if(post.length()==1)return post;
else if(post.length()==0)return "";
String root,left,right;
root = String.valueOf(post.charAt(post.length()-1));
int m = mid.indexOf(root);
left = preOrder(post.substring(post.length()-mid.length(),m),mid.substring(0,m));
right = preOrder(post.substring(m,post.length()-1),mid.substring(m+1));
return root+left+right;
}
}