study/java/src/com/thinker/bishi/offer/ReconstructBinaryTree.java

41 lines
1019 B
Java
Executable File

package com.thinker.bishi.offer;
class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x){ val = x;}
}
public class ReconstructBinaryTree{
public static TreeNode reConstructBinaryTree(int [] pre,int [] in) {
TreeNode root=reConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1);
return root;
}
private static TreeNode reConstructBinaryTree(int [] pre,int startPre,int endPre,int [] in,int startIn,int endIn) {
if(startPre>endPre||startIn>endIn)
return null;
TreeNode root=new TreeNode(pre[startPre]);
for(int i=startIn;i<=endIn;i++){
if(in[i]==pre[startPre]){
root.left=reConstructBinaryTree(pre,startPre+1,startPre+i-startIn,in,startIn,i-1);
root.right=reConstructBinaryTree(pre,i-startIn+startPre+1,endPre,in,i+1,endIn);
}
}
return root;
}
public static void main(String[] args){
int[] pre = new int[]{1,2,4,7,3,5,6,8};
int[] in = new int[]{4,7,2,1,5,3,8,6};
TreeNode result = reConstructBinaryTree(pre,in);
System.out.println(result);
}
}