/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public TreeNode buildTree(int[] inorder, int[] postorder) { return build(inorder,0,inorder.length-1,postorder,0,postorder.length-1); } public TreeNode build(int[] inorder,int inStart,int inEnd,int[] postorder,int postStart,int postEnd){ if(inStart>inEnd) return null; int rootVal = postorder[postEnd]; int index = 0; for(int i = inStart;i <= inEnd;i++){ if(inorder[i] == rootVal){ index = i; break; } } TreeNode root = new TreeNode(rootVal); int leftsize = index-inStart; root.left = build(inorder,inStart ,index-1 ,postorder,postStart ,postStart+leftsize-1 ); root.right = build(inorder,index+1 ,inEnd ,postorder,postStart+leftsize, postEnd-1); return root; } }