class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class BinaryCode {
public static void main(String[] args) {
int[] pre = {1,2,4,7,3,5,6,8};
int[] in = {4,7,2,1,5,3,8,6};
TreeNode treeNode = reConstructBinaryTree(pre, in);
System.out.println(treeNode.toString());
}
public static TreeNode reConstructBinaryTree(int [] pre, int [] in) {
if(pre == null || pre.length == 0){
return null;
}
int root = pre[0];
TreeNode node = new TreeNode(root);
int rootIndex = -1;
for (int i = 0; i < in.length; i++) {
if(in[i] == root){
rootIndex = i;
}
}
if(rootIndex < 0){
return null;
}
int[] leftInTree = Arrays.copyOfRange(in,0,rootIndex);
if(leftInTree.length > 0){
int[] leftPreTree = Arrays.copyOfRange(pre,1,leftInTree.length+1);
if(leftPreTree.length > 0){
node.left = reConstructBinaryTree(leftPreTree,leftInTree);
}
}
int[] rightInTree = Arrays.copyOfRange(in,rootIndex+1,in.length);
if(rightInTree.length>0){
int[] rihtPreTree = Arrays.copyOfRange(pre,pre.length-rightInTree.length,pre.length);
if(rihtPreTree.length > 0){
node.right = reConstructBinaryTree(rihtPreTree,rightInTree);
}
}
return node;
}
}