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 }