1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Solution { public TreeNode buildTree(int[] inorder, int[] postorder) { HashMap<Integer,Integer> map=new HashMap<>(); for(int i=0;i<inorder.length;i++){ map.put(inorder[i],i); } return buildTreeHelper(inorder,0,inorder.length-1,postorder,0,postorder.length-1,map);
} public TreeNode buildTreeHelper(int[] inorder,int i_start,int i_end,int[] postorder,int p_start,int p_end,HashMap<Integer,Integer> map){ if(postorder.length==0||inorder.length==0||p_start>p_end||i_start>i_end){ return null; } int root_val=postorder[p_end]; TreeNode root=new TreeNode(root_val); int i_root_index=map.get(root_val); int leftnum=i_root_index-i_start; root.right=buildTreeHelper(inorder,i_root_index+1,i_end,postorder,p_start+leftnum,p_end-1,map); root.left=buildTreeHelper(inorder,i_start,i_root_index-1,postorder,p_start,p_start+leftnum-1,map); return root;
} }
|