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

文档讲解:
递归,层序遍历,BFS,DFS

654.最大二叉树

思路:这道题的思路跟之前利用前序遍历和中序遍历的数组来构造二叉树是一样的,抓住的关键点就是每个树的根节点,如何分割出来左子树和右子树!

class Solution {
public:int mymax(vector<int> nums){int result=INT_MIN;for(auto i=nums.begin();i!=nums.end();++i){result=result>*i?result:*i;}return result;}TreeNode* constructMaximumBinaryTree(vector<int>& nums) {if(nums.size()==0) return nullptr;int rootvalue=mymax(nums);TreeNode* root=new TreeNode(rootvalue);int deindex;for(deindex=0;deindex<nums.size();deindex++){if(nums[deindex]==rootvalue)break;}vector<int> lefttree(nums.begin(),nums.begin()+deindex);vector<int> righttree(nums.begin()+deindex+1,nums.end());root->left=constructMaximumBinaryTree(lefttree);root->right=constructMaximumBinaryTree(righttree);return root;}
};

617.合并二叉树

思路:这道题最开始还是没想清楚这个逻辑,产生这个新节点应该怎么去讨论!

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

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

思路:最开始拿到这道题的时候,我使用的是层序遍历来做,虽然也能做出来,但是有点不够好,因为这是一道二叉搜索树中的搜索问题,其有一个性质没有利用,其左子树一定是小于根节点,右子树一定是大于根节点的!故重新写了递归版本。

层序遍历:

class Solution {
public:TreeNode* searchBST(TreeNode* root, int val) {if(root==nullptr)return nullptr;queue<TreeNode*>que;que.push(root);TreeNode* result=nullptr;while(!que.empty()){int size=que.size();while(size--){TreeNode* cur=que.front();que.pop();if(cur->val==val){result=cur;break;}if(cur->left)que.push(cur->left);if(cur->right)que.push(cur->right);}}return result;}
};

递归法:

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

98.验证二叉搜索树

思路:这个题得把中序遍历联系起来,有两种做法!

class Solution {
public:long long maxVal=LONG_MIN;bool isValidBST(TreeNode* root) {if(root==nullptr)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;}
};
class Solution {
public:void inoreder(TreeNode* root,vector<int>& result){if(root==nullptr)return;inoreder(root->left,result);result.push_back(root->val);inoreder(root->right,result);}bool isValidBST(TreeNode* root) {vector<int>result;inoreder(root,result);for(int i=0;i<result.size()-1;i++){if(result[i]>=result[i+1])return false;}return true;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/656811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pi 5缺货?CM5什么出来?RP2024? 在 CES2024 上访谈树莓派CEO Eben Upton

Pi 5缺货&#xff1f;CM5什么出来&#xff1f;RP2024&#xff1f; 在 CES2024 上访谈树莓派CEO Eben Upton 树莓派 CEO Eben Upton 在 CES2024 上回答关于树莓派5缺货&#xff0c;Pi 5与AI&#xff0c;以及 CM5 和 RP2024 的未来发展这些相关问题。 00:00 - 树莓派上的AI &…

设计模式之框架源码剖析(实战+图解)

Java设计模式 1&#xff0c;概述 随着软件开发人员人数的增多&#xff0c;一些公司急需一些高端人才。作为一个高端人才&#xff0c;设计面向对象软件是必不可少的能力&#xff0c;而软件设计是需要很深的功力&#xff0c;设计模式就要求你必须掌握。 2&#xff0c;本章特色…

IO

IO&#xff08;Input/Output&#xff09;机制是指计算机与外界进行数据交换的过程。在计算机操作中&#xff0c;输入和输出是不可避免的两个环节。输入可以理解为从外部设备&#xff08;如键盘、鼠标等&#xff09;读取数据&#xff0c;输出则是将数据发送到外部设备&#xff0…

Linux(CentOS7)常见指令的常见用法(上)

指令功能hostname查看当前的主机名hostnamectl set-hostname修改主机名adduser添加用户passwd给用户设置密码userdel -r 删除用户ls显示某路径下的文件名ls -l ll 显示某路径下每个文件及其属性ls -la ls -al 显示某路径下所有文件包括隐藏文件及属性ls -d只看指定文件夹&…

《Linux C编程实战》笔记:信号应用于事件通知

实际应用中&#xff0c;进程可能需要等待某一事件的发生&#xff0c;一般可以通过检测某一全局变量来判断事件是否发生。有三种方法可以实现这一要求。 第一种&#xff1a;程序不停循环检测全局变量&#xff0c;这样可以满足要求&#xff0c;但是非常占用cpu资源 #include<…

5-1 A. DS串应用--KMP算法

题目描述 学习KMP算法&#xff0c;给出主串和模式串&#xff0c;求模式串在主串的位置 算法框架如下&#xff0c;仅供参考 输入 第一个输入t&#xff0c;表示有t个实例 第二行输入第1个实例的主串&#xff0c;第三行输入第1个实例的模式串 以此类推 输入样例&#xff1a; 3 qwe…

dfs专题 P1706 全排列问题——洛谷(题解)

题目描述 按照字典序输出自然数 11 到 &#xfffd;n 所有不重复的排列&#xff0c;即 &#xfffd;n 的全排列&#xff0c;要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 &#xfffd;n。 输出格式 由 1∼&#xfffd;1∼n 组成的所有不重复的数字…

Mac下手动源码编译安装Swig

使用Homebrew安装 这个方式最简单&#xff0c;但是一般都是安装的最新版&#xff1a; brew install swig如果按照特定版本&#xff0c;需要看一个当前支持的列表&#xff1a; brew search swig brew install swig3源码编译安装 swig依赖pcre库&#xff0c;需要先安装pcre …

浅谈一下软件 QA 方法论 和 工具

浅谈一下软件 QA 方法论 和 工具 目录概述需求&#xff1a; 设计思路实现思路分析1.QA方法论2.Java QA工具 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result…

Oracle Extractor 软件下载

oracle Extractor 研发背景 在企业日益增长的 IT 系统中&#xff0c;数据容量正以几何级数扩展。 oracle DBA 在保证数据完整 性的课题上正面临着现有磁盘存储系统容量不足以存放全量备份&#xff0c;基于磁带的数据备份在恢 复数据时往往要求远远超过预期的平均修复时间等实际…

Linux系统——文本三剑客

目录 一、grep 1.格式 2.选项 2.1 grep重定向 2.2grep -m 匹配到几次停止 2.3grep -i 忽略大小写 2.4grep -n 显示行号 2.5grep -c 统计匹配行数 2.6grep -A 后几行 2.7grep -C 前后三行 2.8grep -B 前三行 2.9grep -e 或 2.10grep -w 匹配整个单词 2.11grep -r…

窥探向量乘矩阵的存内计算原理—基于向量乘矩阵的存内计算

在当今计算领域中&#xff0c;存内计算技术凭借其出色的向量乘矩阵操作效能引起了广泛关注。本文将深入研究基于向量乘矩阵的存内计算原理&#xff0c;并探讨几个引人注目的代表性工作&#xff0c;如DPE、ISAAC、PRIME等&#xff0c;它们在神经网络和图计算应用中表现出色&…

现代C++之万能引用、完美转发、引用折叠FrancisFrancis

转载&#xff1a;现代C之万能引用、完美转发、引用折叠 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/99524127 后期参考(还未整合)&#xff1a;C 完美转发深度解析:从入门到精通_c完美转发-CSDN博客https://blog.csdn.net/qq_21438461/article/details/129938466 0.导语 …

Dragons

题目链接&#xff1a; Problem - 230A - Codeforces 解题思路&#xff1a; 用结构体排序就好&#xff0c;从最小的开始比较&#xff0c;大于就加上奖励&#xff0c;小于输出NO 下面是c代码&#xff1a; #include<iostream> #include<algorithm> using namespac…

Java发送post请求

Java发送post请求 1.省份字典2.姓氏字典3.结婚时祝愿字典4.发送Post请求5.整合一起 1.省份字典 List<String> provinces new ArrayList<>();provinces.add("北京");provinces.add("天津");provinces.add("河北");provinces.add(&qu…

Python程序设计 流程控制

1. if判断语句 if 语句是最简单的选择结构。如果满足条件就执行设定好的操作&#xff0c;不满足条件就执行其他其他操作。 1.1 判断的定义 如果 条件满足&#xff0c;才能做某件事情&#xff0c; 如果 条件不满足&#xff0c;就做另外一件事情&#xff0c;或者什么也不做 …

java框架面试篇

Spring框架 spring Bean线程安全问题 Scope注解 我们可以在bean的类上加Scope注解来声明这个Bean是单个实例还是多个实例。在默认情况下Bean是单个实例的&#xff0c;此时的注解中的属性默认为Scope("singleton")&#xff0c;Scope("prototype")则是一…

dfs专题(记忆化搜索)P1141 01迷宫——洛谷(题解)

题目描述 有一个仅由数字 00 与 11 组成的 &#xfffd;&#xfffd;nn 格迷宫。若你位于一格 00 上&#xff0c;那么你可以移动到相邻 44 格中的某一格 11 上&#xff0c;同样若你位于一格 11 上&#xff0c;那么你可以移动到相邻 44 格中的某一格 00 上。 你的任务是&#…

一、图像读取显示

读取和显示函数主要为&#xff1a;imread()和imshow()函数 imread函数&#xff0c;im是image的缩写&#xff0c;read就是读入一张图片 同理&#xff0c;imshow也是一样的 C中读入的图片是按照矩阵&#xff08;Matrix&#xff09;进行存储的&#xff0c;故定义变量src的数据类型…

【pytorch】nn.linear 中为什么是y=xA^T+b

我记得读教材的时候是yWxb, 左乘矩阵W&#xff0c;这样才能表示线性变化。 但是pytorch中的nn.linear中&#xff0c;计算方式是yxA^Tb&#xff0c;其中A是权重矩阵。 为什么右乘也能表示线性变化操作呢&#xff1f;因为pytorch中&#xff0c;照顾到输入是多个样本一起算的&…