www

导航

重建二叉树

    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        if(pre==null||in==null||pre.length!=in.length||pre.length<1) return null;
        return helper(pre,0,pre.length-1,in,0,in.length-1);
    }
    
    private TreeNode helper(int[] pre, int ps, int pe, int[] in, int is, int ie){
        if(ps>pe || is>ie) return null;
        int val = pre[ps];
        int index=is;
        while(index<=ie&&in[index]!=val) index++;
        if(index>ie) throw new RuntimeException("invalid"+ie);
        TreeNode root = new TreeNode(val);
        root.left = helper(pre,ps+1,ps+index-is,in,is,index-1);
        root.right = helper(pre,ps+index-is+1,pe,in,index+1,ie);
        return root;
    }

 

posted on 2019-02-25 19:10  www_practice  阅读(123)  评论(0编辑  收藏  举报