public TreeNode buildTree_lint(int[] preorder, int[] inorder) {
        // write your code here
        if (preorder == null || preorder.length == 0 || inorder == null || inorder.length == 0 || inorder.length != preorder.length)
            return null;
        // value -> index
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        for (int i = 0; i < inorder.length; ++i)
            map.put(inorder[i], i);
        return builder(map, preorder, 0, preorder.length - 1, 0, inorder.length - 1);
    }