暑期实习 算法 Day3

76 阅读1分钟

二叉树的构造

前序和后序遍历数组,构造出二叉树

public TreeNode constructFromPrePost(int[] preorder, int[] postorder) {
        if(preorder == null || preorder.length == 0) return null;
        return dfs(preorder, postorder);
    }

    public TreeNode dfs(int[] pre, int[] post){
        if(pre==null || pre.length==0) {
            return null;
        }
        if(pre.length == 1) return new TreeNode(pre[0]);

        TreeNode root = new TreeNode(pre[0]);
        int n = pre.length;

        for(int i=0;i<post.length;i++){
            if(pre[1] == post[i]){
                int left_count = i + 1;
                int[] pre_left = Arrays.copyOfRange(pre, 1, 1 + left_count);
                int[] pre_right = Arrays.copyOfRange(pre, left_count + 1, pre.length);
                int[] post_left = Arrays.copyOfRange(post,0,left_count);
                int[] post_right = Arrays.copyOfRange(post,left_count,post.length-1);

                root.left = dfs(pre_left,post_left);
                root.right = dfs(pre_right,post_right);
            }
        }
        return root;
    }

前序和中序遍历数组,构造出二叉树