题解 | #空间复杂度更低的解法-重建二叉树#

重建二叉树

http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6

此题的思路就是分治问题,用递归的方式解决,前面的大佬们已经讲过了。
不过有个待优化的地方,就是递归的时候数组其实可以不用拷贝,这样可以减少很多内存空间的使用。
下面贴上代码:

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

    private static TreeNode dfs(int [] pre,int [] vin, int pstart, int vstart, int len){
        if (len == 0) return null;
        if (len ==  1) return new TreeNode(pre[pstart]);
        TreeNode ans = new TreeNode(pre[pstart]);
        if (len == 2){
            if (vin[vstart] == pre[pstart]){
                ans.right = new TreeNode(pre[pstart+1]);
            } else{
                ans.left = new TreeNode(pre[pstart+1]);
            }
            return ans;
        }
        int rootIndexOfVin = vstart;
        while (pre[pstart] != vin[rootIndexOfVin]){
            rootIndexOfVin++;
        }
        ans.left = dfs(pre, vin, pstart+1, vstart, rootIndexOfVin-vstart);
        ans.right = dfs(pre, vin, pstart+1+rootIndexOfVin-vstart, 1+rootIndexOfVin, len-1-rootIndexOfVin+vstart);
        return ans;

    }

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务