代码随想录算法训练营第十七天| 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

654.最大二叉树

1. 偷懒直接用了内置的函数

最大值:int maxValue = *max_element(v.begin(),v.end());  返回的是迭代器

最大值下标:int maxPosition = max_element(v.begin(),v.end()) - v.begin(); 

2. vector容器取切片的方法

 vector<int> numright(nums.begin()+1,nums.end()); 用迭代器写

class Solution {
private:
    TreeNode* findMax(vector<int>& nums){
        if (nums.size()==0) return NULL;
        int max = *max_element(nums.begin(), nums.end());
        TreeNode *root=new TreeNode(max);
        //if(nums.size()==1) return root;
        int max_index=max_element(nums.begin(),nums.end())-nums.begin();
        if(max_index==0)
        {
            vector<int> numright(nums.begin()+1,nums.end());
            root->right=findMax(numright);
        }
        else if(max_index==nums.size()-1)
        {
            vector<int> numleft(nums.begin(),nums.end()-1);
            root->left=findMax(numleft);
        }
        else
        {
            vector<int> numleft(nums.begin(),nums.begin()+max_index);
            vector<int> numright(nums.begin()+1+max_index,nums.end());
            root->right=findMax(numright);
            root->left=findMax(numleft);
        }      
        return root;  
    }

public:
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        return findMax(nums);
    }
};

617.合并二叉树

1. 同时处理两个二叉树,有点陌生,也是一边遍历一边处理,直接传入两个参数就可以了

class Solution {
public:
    TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
        //先遍历二叉树,再处理 
        if(t1==NULL) return t2;
        if(t2==NULL) return t1;
        t1->val+=t2->val;
        t1->left=mergeTrees(t1->left,t2->left);     
        t1->right=mergeTrees(t1->right,t2->right);
        return t1;
    }


};

700.二叉搜索树中的搜索

比较简单

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

98.验证二叉搜索树

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值