leetcode从中序与后序遍历序列构造二叉树java

leetcode从中序与后序遍历序列构造二叉树java_第1张图片
因为题中说了不存在重复元素,所以可以使用HashMap,用中序数组值做键,下标做值,从而快速定位中序数组中根节点位置。
(这是和大佬学得=-=,我一开始的想法就是写个循环,直接遍中序历元素获取根位置)
然后递归不断划分数组,构造二叉树

class Solution {
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        Map<Integer,Integer> inorderMap = new HashMap<>();
        int length = inorder.length-1;
        //初始化哈希表
        for(int i=0;i<=length;i++){
            inorderMap.put(inorder[i],i);
        }
        return build(inorder,0,length,postorder,0,length,inorderMap);
    }
    private TreeNode build(int[] inorder,int begini,int endi,int[] postorder,int beginp,int endp,Map<Integer,Integer> map){
        TreeNode root=null;
        //结束条件
        if(begini<=endi){
            int index = map.get(postorder[endp]);
            int leftl = index - begini;
            root = new TreeNode(postorder[endp]);
            root.left = build(inorder,begini,index-1,postorder,beginp,beginp+leftl-1,map);
            root.right = build(inorder,index+1,endi,postorder,beginp+leftl,endp-1,map);
        }
        return root;
    }
}

你可能感兴趣的:(leetcode从中序与后序遍历序列构造二叉树java)