首页 > 编程语言 >代码随想录算法训练营第20天

代码随想录算法训练营第20天

时间:2023-01-16 20:23:11浏览次数:52  
标签:right TreeNode val 训练营 随想录 return 20 root left

今日刷题4道 654.最大二叉树, 617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树

●  654.最大二叉树

题目链接/文章讲解:https://programmercarl.com/0654.%E6%9C%80%E5%A4%A7%E4%BA%8C%E5%8F%89%E6%A0%91.html

视频讲解:https://www.bilibili.com/video/BV1MG411G7ox

class Solution { public:     TreeNode* constructMaximumBinaryTree(vector<int>& nums) {         TreeNode* node = new TreeNode(0);         if(nums.size() == 1){             node -> val = nums[0];             return node;         }         int maxvalue = 0;         int maxvalueindex = 0;         for(int i=0;i<nums.size();i++){             if(nums[i] > maxvalue){                 maxvalue = nums[i];                 maxvalueindex = i;             }                   }         node->val = maxvalue;         if(maxvalueindex > 0){             vector<int> newvec(nums.begin(),nums.begin()+maxvalueindex);             node->left = constructMaximumBinaryTree(newvec);         }         if(maxvalueindex < (nums.size()-1)){             vector<int> newvec(nums.begin()+maxvalueindex+1,nums.end());             node->right = constructMaximumBinaryTree(newvec);         }         return node;     } };

●  617.合并二叉树

题目链接/文章讲解:https://programmercarl.com/0617.%E5%90%88%E5%B9%B6%E4%BA%8C%E5%8F%89%E6%A0%91.html

视频讲解:https://www.bilibili.com/video/BV1m14y1Y7JK

 碎碎念:可以在原有的root1,root2上进行修改,也可以构造新的树。

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

●  700.二叉搜索树中的搜索

题目链接/文章讲解: https://programmercarl.com/0700.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E6%90%9C%E7%B4%A2.html

视频讲解:https://www.bilibili.com/video/BV1wG411g7sF

迭代法:

class Solution { public:     TreeNode* searchBST(TreeNode* root, int val) {         while(root !=NULL){             if(root->val < val) root=root->right;             else if(root->val > val) root = root->left;             else return root;         }         return NULL;     } }; 递归法: class Solution { public:     TreeNode* searchBST(TreeNode* root, int val) {        if(root==NULL || root->val==val) return root;        TreeNode* result = NULL;        if(root->val>val) result = searchBST(root->left, val);        if(root->val<val) result = searchBST(root->right,val);        return result;             } };

●  98.验证二叉搜索树

题目链接/文章讲解:https://programmercarl.com/0098.%E9%AA%8C%E8%AF%81%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html

视频讲解:https://www.bilibili.com/video/BV18P411n7Q4

碎碎念:题目是真简单,用例是真过不去啊,不能单纯的比较左节点小于中间节点,右节点大于中间节点就完事了。我们要比较的是 左子树所有节点小于中间节点,右子树所有节点大于中间节点。

中序遍历法:

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

递归法:

class Solution {
public:     long long maxval = LONG_MIN;     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;

    } };

标签:right,TreeNode,val,训练营,随想录,return,20,root,left
From: https://www.cnblogs.com/zzw0612/p/17055596.html

相关文章

  • 2023.1.9周报
    2023.1.9周报本周总结本周复习了树的直径,最近公共祖先,树上差分和前缀和和tarjan求scc等内容,学习了0/1分数规划,负环,差分约束系统。大主题图论小专题树的直径,最近公共......
  • 回顾2022,展望2023
    大家好,我是练习时长5年半的java选手,回顾2022,是我的人生低谷,因为这一年我被裁了。之前工作的公司中也经历过裁员,但是当时没觉得会裁自己(事实上也没有裁我),所以没当回事......
  • 2023/1/16 20221321杨渝学习打卡
    python入门学习学习链接:https://www.bilibili.com/video/BV14r4y1k7F9/?spm_id_from=333.999.0.0&vd_source=a989a1afa6cb8b6527dd9bf059d71439字典的循环打印(解构)字典......
  • 【拓扑排序】LeetCode 207. 课程表
    题目链接207.课程表思路参考Krahets大佬的思路代码classSolution{publicbooleancanFinish(intnumCourses,int[][]prerequisites){int[]inde......
  • WC 2023 游记
    先写在这里,以后排版Day01.12开幕式&文艺汇演最近事比较多,浅浅地看了一下最后几分钟。当时川剧的时候演员下台和嘉宾们握手,距离比较近。握完最后一个时,突然变一张脸,那......
  • C++文学研究助手[2023-01-16]
    C++文学研究助手[2023-01-16]综合实验18文学研究助手一、实验目的(1)熟练掌握串的基本操作及应用。(2)熟练掌握串的匹配操作算法。(3)基于串的存储和操作,实现对英文......
  • IDEA2018.1创建Maven工程
    点击ok,下一步如果左侧没有显示包的话FIile>CloseProject>删除.idea文件夹>重新open......
  • C语言最短路径[迪杰斯特拉算法][2023-01-16]
    C语言最短路径[迪杰斯特拉算法][2023-01-16]算法与数据结构课程设计要求一、 题目:最短路径二、课程设计报告要求1、设计目的(1)要求熟练掌握C语言的基本知识和编程技......
  • ubuntu20.04搭建Nginx+rtmp服务器
    1.ubuntu20.04安装Nginx代理服务器安装nginxsudoaptupdatesudoaptinstallnginx安装完成后,Nginx将会自动被启动。运行下面的命令来验证:   测试安装在网页......
  • 2023.1.16周报
    本周总结这周琐事较多,忙着回老家各种,训练量较小,这周主要还是在写数据结构,外加一部分的数论基础知识,主要还是跟着牛客的专题推进。大专题数据结构小专题莫队,带修莫队,......