代码随想录算法训练营第二十天|LeetCode654、LeetCode617、LeetCode 700、LeetCode98

LeetCode654

题目:

 解法:

class Solution {
public:
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        int max = nums[0];
        int maxpos = 0;
        for(int i = 0; i < nums.size();i++){
            if(max < nums[i]){
                max = nums[i];
                maxpos = i;
            }
        }
        TreeNode* root = new TreeNode(max);
        if(nums.size() == 1) return root;
        vector<int> lefttree(nums.begin(),nums.begin() + maxpos);
        vector<int> righttree(nums.begin() + maxpos + 1, nums.end());
        if(lefttree.size() > 0) root -> left = constructMaximumBinaryTree(lefttree);
        if(righttree.size() > 0) root -> right = constructMaximumBinaryTree(righttree);
        return root;
    }
};

Leetcode617

题目:

解法:

class Solution {
public:
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
        if(root1 == NULL && root2 == NULL) return NULL;
        TreeNode* root;
        if(root1 == NULL && root2) {
            root = new TreeNode(root2 -> val);
            root -> left = mergeTrees(root2 -> left ,NULL);
            root -> right = mergeTrees(root2 -> right ,NULL);
            return root;
        }
        if(root1 && root2 == NULL) {
            root = new TreeNode(root1 -> val);
            root -> left = mergeTrees(root1 -> left ,NULL);
            root -> right = mergeTrees(root1 -> right ,NULL);
            return root;
        }
        root = new TreeNode(root1 -> val + root2 -> val);
        root -> left = mergeTrees(root1 -> left ,root2 -> left);
        root -> right = mergeTrees(root1 -> right ,root2 -> right);
        return root;
    }
};

 解法2:(递归)

class Solution {
public:
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
        if(root1 == NULL) return root2;
        if(root2 == NULL) return root1;
        root1 ->val += root2 -> val;
        root1 ->left = mergeTrees(root1 -> left, root2 -> left);
        root1 ->right = mergeTrees(root1 -> right, root2 -> right);
        return root1;
    }
};

LeetCode 700

题目:

解法:

class Solution {
public:
    int value = 0;
    TreeNode* result;
    TreeNode* searchBST(TreeNode* root, int val) {
        if(value == 1) return result;
        if(root -> val == val){
            value = 1;
            result = root;
            return result;
        } 
        if(root -> left && root -> val > val )  return searchBST(root -> left,  val);
        if(root -> right && root -> val < val) return searchBST(root -> right,  val);
        return NULL;
    }
};

Leetcode 98

 解法:

class Solution {
public:
    vector<int> vec;
    void middle(TreeNode* root){
        if(root == NULL) return;
        if(root -> left) middle(root -> left);
        vec.push_back(root -> val);
        if(root -> right) middle(root -> right);
        return;
    }
    bool isValidBST(TreeNode* root) {
        middle(root);
        for(int i = 0;i < vec.size() - 1;i++){
            if(vec[i] >= vec[i+1]) return false;
        }
        return true;
    }
};

 递归法:

class Solution {
public:
    long long maxVal = LONG_MIN; // 因为后台测试数据中有int最小值
    bool isValidBST(TreeNode* root) {
        if (root == NULL) return true;

        bool left = isValidBST(root->left);
        // 中序遍历,验证遍历的元素是不是从小到大
        if (maxVal < root->val) maxVal = root->val;
        else return false;
        bool right = isValidBST(root->right);

        return left && right;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值