题目:hihocoder #1049
输入
每个测试点(输入文件)有且仅有一组测试数据。
每组测试数据的第一行为一个由大写英文字母组成的字符串,表示该二叉树的前序遍历的结果。
每组测试数据的第二行为一个由大写英文字母组成的字符串,表示该二叉树的中序遍历的结果。
对于100%的数据,满足二叉树的节点数小于等于26。
输出
对于每组测试数据,输出一个由大写英文字母组成的字符串,表示还原出的二叉树的后序遍历的结果。
样例输入
AB
BA
样例输出
BA
import java.util.Scanner;
public class PostorderTraver {//post_order(str1, str2)=post_order(str1l, str2l)+post_order(str1r, str2r)+root
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine();
String s2 = sc.nextLine();
System.out.println(post_order(s1,s2));
}
private static String post_order(String str1,String str2){//str1 先序遍历的结果 str2 中序遍历
String res = "";
if(str1.length() == 1){//叶子节点 l = 1
return str1;
}
if(str1.length() == 0){//为空 l = 0
return str1;
}
String root = "" + str1.charAt(0);
String str1l;
String str1r;
String str2l;
String str2r;
str2l = str2.substring(0, str2.indexOf(""+str1.charAt(0)));//根据root位置切割
str2r = str2.substring(str2.indexOf(""+str1.charAt(0))+1, str2.length());
str1l = str1.substring(1,str2l.length()+1);//左子串
str1r = str1.substring(str2l.length()+1,str1.length());
res = post_order(str1l,str2l)+post_order(str1r,str2r)+root;//左 右 根
return res;
}
}
初次接触hihocoder,有提示,测评也很温和,不会卡过于细节的地方,评测的contest希望能坚持下来,给自己一段空闲时间挑战一下。上面的后序遍历已用java实现,希望能对有疑惑的小伙伴提供帮助。