问题:
给出一个二叉树的中序遍历和后序遍历结果,求前序遍历结果输出
第一行:中序遍历结果
第二行:后续遍历结果
前序遍历结果
样例输入:
dgbaechf
gbdehfca
样例输出:
adbgcefh
import java.util.*;
public class Main{
static class TreeNode{
TreeNode left;
TreeNode right;
char c;
public TreeNode(char c) {
this.c = c;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine().trim();
String s2 = sc.nextLine().trim();
if(s1 == null || s2 == null ||s1.length() != s2.length()) {
return;
}
char [] arr1 = s1.toCharArray();
char [] arr2 = s2.toCharArray();
if(!check(arr1,arr2)) {
return;
}
if(arr1.length != arr2.length ) {
return;
}
TreeNode root = buildTree(arr1,0,arr1.length-1,arr2,0,arr2.length-1);
preOrder(root);
}
public static TreeNode buildTree(char []in,int ini,int inj,char[] post,int posi,int posj) {
if(ini>inj || posi>posj) return null;
int index = 0;
TreeNode root = new TreeNode(post[posj]);
for(int i = ini;i<=inj;i++) {
if(in[i] == post[posj]) {
index = i;
break;
}
}
root.left = buildTree(in,ini,index-1,post,posi,posi+index-ini-1);
root.right = buildTree(in,index+1,inj,post,posi+index-ini,posj-1);
return root;
}
public static void preOrder(TreeNode root) {
if(root == null) return;
System.out.print(root.c);
preOrder(root.left);
preOrder(root.right);
}
public static boolean check(char []c1,char []c2) {//检查两个字符数组是否相等
int [] array = new int[26];
for(int i = 0;i<c1.length;i++) {
array[c1[i]-'a']++;
}
for(int i = 0;i<c1.length;i++) {
array[c2[i]-'a']--;
}
for(int i = 0;i<26;i++) {
if(array[i]!=0) return false;
}
return true;
}
}