Untitled
class Solution { public TreeNode buildTree(Vector<Integer> inorder, Vector<Integer> postorder) { if (inorder.size() != postorder.size()) { return null; } Map<Integer, Integer> hm = new HashMap<>(); for (int i = 0; i < inorder.size(); i++) { hm.put(inorder.get(i), i); } return buildTreePostIn(inorder, 0, inorder.size() - 1, postorder, 0, postorder.size() - 1, hm); } public TreeNode buildTreePostIn(Vector<Integer> inorder, int is, int ie, Vector<Integer> postorder, int ps, int pe, Map<Integer, Integer> hm) { if (ps > pe || is > ie) { return null; } TreeNode root = new TreeNode(postorder.get(pe)); int inRoot = hm.get(postorder.get(pe)); int numsLeft = inRoot - is; root.left = buildTreePostIn(inorder, is, inRoot - 1, postorder, ps, ps + numsLeft - 1, hm); root.right = buildTreePostIn(inorder, inRoot + 1, ie, postorder, ps + numsLeft, pe - 1, hm); return root; } }
Leave a Comment