Untitled

 avatar
unknown
plain_text
a month ago
1.2 kB
1
Indexable
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