recursion programming
1 public class Solution { 2 public TreeNode buildTree(int[] preorder, int[] inorder) { 3 // IMPORTANT: Please reset any member data you declared, as 4 // the same Solution instance will be reused for each test case. 5 if(preorder == null) 6 return null; 7 return buildTree(preorder, inorder, 0, preorder.length, 0, inorder.length); 8 } 9 10 private TreeNode buildTree(int[] preorder, int[] inorder, int preorderStart, int preorderEnd, int inorderStart, int inorderEnd) 11 { 12 if(preorderStart >= preorderEnd) 13 return null; 14 TreeNode tmp = new TreeNode(preorder[preorderStart]); 15 if(preorderEnd - preorderStart == 1) 16 return tmp; 17 int newinorderStart = inorderStart; 18 19 while(inorder[newinorderStart] != preorder[preorderStart]) 20 { 21 newinorderStart++; 22 } 23 24 int newpreorderStart = preorderStart + 1; 25 int newpreorderEnd = newpreorderStart + (newinorderStart - inorderStart); 26 tmp.left = buildTree(preorder, inorder, newpreorderStart, newpreorderEnd, inorderStart, newinorderStart); 27 tmp.right = buildTree(preorder, inorder, newpreorderEnd, preorderEnd, newinorderStart+1, inorderEnd); 28 return tmp; 29 } 30 }