题解 | #重建二叉树#

重建二叉树

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

递归,用和快排差不多的思路,分割每次构建子树的数组范围

class Solution {
public:
    TreeNode* createBTree(vector<int> pre,vector<int> vin,int L,int R,int l,int r)
    {
        if(R < L || r<l)
            return nullptr;
        TreeNode* root = new TreeNode(pre[L]);
        int pos = l;
        for(pos = l;pos<r;pos++)
            if(vin[pos] == pre[L])
                break;
        root->left = pos == l?nullptr:createBTree(pre, vin, L+1, L+pos-l,l,pos-1);
        root->right = pos == r?nullptr:createBTree(pre, vin, L+pos-l+1,R,pos+1,r);
        return root;
    }
    
    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
        int len = pre.size();
        return createBTree(pre,vin,0,len-1,0,len-1);
    }
};
全部评论

相关推荐

鼠鼠能上岸吗:进行中是秋招大项目进行中,你还可以选别的岗位;已结束是这个岗位流程结束了;筛选中就是在简历筛选环节没hr捞
投递美团等公司10个岗位
点赞 评论 收藏
分享
写不来代码的小黑:这好像是boss默认的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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