1 public class Solution { 2 public TreeNode buildTree(int[] preorder, int[] inorder) { 3 int len1 = preorder.length; 4 int len2 = inorder.length; 5 if(len1==0) return null; 6 return helper(preorder,0,len1-1,inorder,0,len2-1); 7 } 8 public TreeNode helper(int[]pre,int preStart,int preEnd,int[] in,int inStart,int inEnd){ 9 TreeNode p = new TreeNode(pre[preStart]); 10 p.left = null; 11 p.right = null; 12 if(preStart==preEnd && pre[preStart]==in[inStart]) 13 return p; 14 int mid=inStart; 15 for(;mid<=inEnd;mid++){ 16 if(in[mid]==pre[preStart]) 17 break; 18 } 19 int leftLen = mid-inStart; 20 if(leftLen>0) 21 p.left = helper(pre,preStart+1,preStart+leftLen,in,inStart,mid-1); 22 if(inEnd>mid) 23 p.right = helper(pre,preStart+leftLen+1,preEnd,in,mid+1,inEnd); 24 return p; 25 } 26 }
Construct Binary Tree from Preorder and Inorder Traversal
原文:http://www.cnblogs.com/krunning/p/3545276.html