LeetCode 998. 最大二叉樹 II(樹的解析與樹的重建)

最大二叉樹 II
相當於給定由一個序列構建一棵二叉樹的規則,然後我們先用這棵樹反序列化得出序列,然後再加上一個數字,再用新的序列去構建樹。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<int> nums;
    TreeNode* insertIntoMaxTree(TreeNode* root, int val) {
        nums = getNums(root);
        nums.push_back(val);
        return create(0,nums.size()-1,nums);
    }
    vector<int> getNums(TreeNode* root){
        vector<int> res;
        if(!root){
            return res;
        }
        vector<int> lNum = getNums(root->left);
        vector<int> rNum = getNums(root->right);
        for(int x:lNum){
            res.push_back(x);
        }
        res.push_back(root->val);
        for(int x:rNum){
            res.push_back(x);
        }
        return res;
    }

    TreeNode* create(int l,int r,vector<int>& nums){
        if(l>r){
            return nullptr;
        }
        int mmax = nums[l],idx=l;
        for(int i=l+1;i<=r;i++){
            if(nums[i]>mmax){
                mmax = nums[i];
                idx = i;
            }
        }
        TreeNode* root = new TreeNode(mmax);
        root->left = create(l,idx-1,nums);
        root->right = create(idx+1,r,nums);
        return root; 
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章