JZ4重建二叉树

重建二叉树

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

一、
思路:https://blog.nowcoder.net/n/c56eeb5b1845432a903db1c3c0cbc80a?f=comment
https://blog.nowcoder.net/n/7131c90ce3214472887b0f2f6652f5a7?f=comment

代码

class Solution {
public:
    TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> vin) {
        return rebuild(pre, 0, pre.size()-1, vin, 0, vin.size()-1);
    }
    TreeNode* rebuild(vector<int>& pre, int pre_left, int pre_right, vector<int>& vin, int vin_left, int vin_right) {
        if (pre_left > pre_right || vin_left > vin_right) return nullptr;

        TreeNode* root = new TreeNode(pre[pre_left]);
        for (int i=vin_left; i<=vin_right; ++i) {
            if (vin[i] == root->val) {
                root->left = rebuild(pre, pre_left+1, pre_left+i-vin_left, vin, vin_left, i-1);
                root->right = rebuild(pre, pre_left+i-vin_left+1, pre_right, vin, i+1, vin_right);
                break;
            }
        }
        return root;
    }
};

class Solution {
public:
    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
        int pre_left=0;
        int pre_right=pre.size()-1;
        int vin_left=0;
        int vin_right=vin.size()-1;
        if(pre.size()==0 || vin.size()==0)
            return nullptr;
        TreeNode* root=new TreeNode(pre[pre_left]);
        int rootIndexInVin= vin_left;
        for(int i=0;i<=vin_right;++i){
            if(vin[i]==root->val){
                rootIndexInVin=i;
                break;
            }
        }
        vector<int> preLeft,preRight,vinLeft,vinRight;
        for(int i=0;i<rootIndexInVin;++i){
            vinLeft.push_back(vin[i]);
            preLeft.push_back(pre[i+1]);
        }
        for(int i=rootIndexInVin+1;i<=vin_right;++i){
            vinRight.push_back(vin[i]);
            preRight.push_back(pre[i]);
        }
        root->left=reConstructBinaryTree(preLeft,vinLeft);
        root->right=reConstructBinaryTree(preRight,vinRight);
        return root;

    }
};
全部评论

相关推荐

02-05 08:49
已编辑
武汉大学 Web前端
野猪不是猪🐗:36k和36k之间亦有差距,ms的36k和pdd的36k不是一个概念
点赞 评论 收藏
分享
02-09 13:09
长安大学 Java
黑皮白袜臭脚体育生:简历条例统一按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能指标来写 可以看看我帖子简历写法
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务