1 public class Solution { 2 public TreeNode buildTree(int[] inorder, int[] postorder) { 3 // IMPORTANT: Please reset any member data you declared, as 4 // the same Solution instance will be reused for each test case. 5 if(inorder == null||postorder == null||inorder.length == 0||postorder.length==0) 6 return null; 7 return buildTree(inorder, postorder, 0, inorder.length-1, 0 ,inorder.length-1); 8 } 9 10 private TreeNode buildTree(int[] inorder, int[] postorder, int instart, int inend, int postart, int poend) 11 { 12 if(instart > inend) 13 return null; 14 TreeNode node = new TreeNode(postorder[poend]); 15 if(instart == inend) 16 return node; 17 int mid = 0; 18 for(int i = instart; i <= inend; i++) 19 { 20 if(inorder[i] == postorder[poend]) 21 { 22 mid = i; 23 break; 24 } 25 } 26 node.left = buildTree(inorder, postorder, instart, mid - 1, postart, postart + (mid - 1 - instart)); 27 node.right = buildTree(inorder, postorder, mid + 1, inend, poend + mid - inend, poend - 1); 28 return node; 29 } 30 }