算法随想录第二十天打卡|654.最大二叉树 , 617.合并二叉树 ,700.二叉搜索树中的搜索 , 98.验证二叉搜索树

654.最大二叉树

又是构造二叉树,昨天大家刚刚做完 中序后序确定二叉树,今天做这个 应该会容易一些, 先看视频,好好体会一下 为什么构造二叉树都是 前序遍历

题目链接/文章讲解:代码随想录

视频讲解:又是构造二叉树,又有很多坑!| LeetCode:654.最大二叉树_哔哩哔哩_bilibili

/*** 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: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;if (nums.size()==1)return node;for (int i=0;i<nums.size();i++){if (maxvalue<nums[i]){maxvalue=nums[i];maxvalueindex=i;}}node->val=maxvalue;if (maxvalueindex>0){vector<int> leftnums{nums.begin(),nums.begin()+maxvalueindex};node->left=constructMaximumBinaryTree(leftnums);}if (maxvalueindex<nums.size()-1){vector<int>rightnums{nums.begin()+maxvalueindex+1,nums.end()};node->right=constructMaximumBinaryTree(rightnums);}return node;}
};

617.合并二叉树

这次是一起操作两个二叉树了, 估计大家也没一起操作过两个二叉树,也不知道该如何一起操作,可以看视频先理解一下。 优先掌握递归。

题目链接/文章讲解:代码随想录

视频讲解:一起操作两个二叉树?有点懵!| LeetCode:617.合并二叉树_哔哩哔哩_bilibili

/*** 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:void traversal(TreeNode* node1,TreeNode* node2){if (node1 && node2)node1->val+=node2->val;if (node1->left && node2->left)traversal(node1->left, node2->left);if (node1->right && node2->right)traversal(node1->right,node2->right);if (!node1->left)node1->left=node2->left;if (!node1->right)node1->right=node2->right;}TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {if ((!root1 && !root2) || (root1 && !root2))return root1;if (!root1 && root2)return root2;traversal(root1,root2);return root1;}
};

总结

这里有对当前节点的判断,还有对下面左右节点的判断。

700.二叉搜索树中的搜索

递归和迭代 都可以掌握以下,因为本题比较简单, 了解一下 二叉搜索树的特性

题目链接/文章讲解: 代码随想录

视频讲解:不愧是搜索树,这次搜索有方向了!| LeetCode:700.二叉搜索树中的搜索_哔哩哔哩_bilibili

/*** 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:TreeNode* traversal(TreeNode* node,TreeNode*res,int val){if (!node || res)return res;if (node->val==val)res=node;if (node->val>val)res=traversal(node->left, res,val);if (node->val<val)res=traversal(node->right,res,val);return res;}TreeNode* searchBST(TreeNode* root, int val) {TreeNode* res=NULL;return traversal(root,res,val);}};

98.验证二叉搜索树

遇到 搜索树,一定想着中序遍历,这样才能利用上特性。

但本题是有陷阱的,可以自己先做一做,然后在看题解,看看自己是不是掉陷阱里了。这样理解的更深刻。

题目链接/文章讲解:代码随想录

视频讲解:你对二叉搜索树了解的还不够! | LeetCode:98.验证二叉搜索树_哔哩哔哩_bilibili

/*** 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:void traversal(TreeNode* node,vector<int>&res){if (!node)return;traversal(node->left,res);res.push_back(node->val);traversal(node->right,res);}bool isValidBST(TreeNode* root) {if (!root)return true;vector<int>res;traversal(root,res);for (int i=1;i<res.size();i++)if (res[i]<=res[i-1])return false;return true;}
};

总结

亏我用回溯解了半天。

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

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

相关文章

「动态规划」打家劫舍

力扣原题链接&#xff0c;点击跳转。 有一个小偷&#xff0c;要偷东西。假设有n个房间&#xff0c;每个房间都有现金&#xff0c;下标为i的房间内的现金数是nums[i]。不能同时偷相邻的2个房间&#xff0c;其中第一个房间和最后一个房间是相邻的。那么这个小偷最多能偷到多少现…

YOLOv8+PyQt5鸟类检测系统完整资源集合(yolov8模型,从图像、视频和摄像头三种路径识别检测,包含登陆页面、注册页面和检测页面)

资源包含可视化的鸟类检测系统&#xff0c;基于最新的YOLOv8训练的鸟类检测模型&#xff0c;和基于PyQt5制作的可视化鸟类检测系统&#xff0c;包含登陆页面、注册页面和检测页面&#xff0c;该系统可自动检测和识别图片或视频当中出现的各种鸟类&#xff0c;以及自动开启摄像头…

Linux汉化Jupyter Notebook

要在Linux系统中使Jupyter Notebook汉化&#xff0c;可以通过安装jupyterlab-language-pack-zh-CN扩展来实现。以下是具体步骤和示例代码&#xff1a; 打开终端。 执行以下命令以安装Jupyter Notebook的中文语言包&#xff1a; pip install jupyterlab-language-pack-zh-CN …

【CSharp】将ushort数组保存为1通道位深16bit的Tiff图片

【CSharp】将ushort数组保存为1通道位深16bit的Tiff图片 1.背景2.接口 1.背景 System.Drawing.Common 是一个用于图像处理和图形操作的库&#xff0c;它是 System.Drawing 命名空间的一部分。由于 .NET Core 和 .NET 5 的跨平台特性&#xff0c;许多以前内置于 .NET Framework…

基于Fluent和深度学习算法驱动的流体力学计算与应用

“基于Fluent和深度学习算法驱动的流体力学计算与应用”专题大纲 目录 主要内容 机器学习与流体力学入门 一、流体力学基础理论与编程实战1、流体力学的发展概述 2、不可压缩流体力学的基本方程 3、湍流理论与湍流模型简介 4、傅里叶变换和流体的尺度分析 5、伪谱法求解不可压…

Vue小程序项目知识积累(二)

1.wx.reLaunch(Object object) 关闭所有页面&#xff0c;打开到应用内的某个页面。 wx.reLaunch({url:/pages/positons/index}) 参数说明&#xff1a; 属性类型默认值必填说明urlstring是需要跳转的应用内页面路径 (代码包路径)&#xff0c;路径后可以带参数。参数与路径之…

微信小程序上传包过大的最全解决方案!

微信小程序的发布大小限制是2MB。然而一个程序怎么能这么小&#xff1f; 介绍一下项目中的经验。 新项目 如果是刚开始做的新项目&#xff0c;一定确定好自己要用的Ui框架&#xff0c;而且确定之后&#xff0c;千万不要引入别的&#xff0c;否则占大小&#xff01;&#xff0…

HNCTF

HNCTF 文章目录 HNCTFBabyPQEZmathez_Classicf(?*?)MatrixRSABabyAESIs this Iso? BabyPQ nc签到题&#xff0c;跟端口连接拿到n和phin n 8336450100232098099043686671148282601664696810002345240872579498695511770993195704402414029892029461830476866385453475141207…

【开源】加油站管理系统 JAVA+Vue.js+SpringBoot+MySQL

目录 一、项目介绍 论坛模块 加油站模块 汽油模块 二、项目截图 三、核心代码 一、项目介绍 Vue.jsSpringBoot前后端分离新手入门项目《加油站管理系统》&#xff0c;包括论坛模块、加油站模块、汽油模块、加油模块和部门角色菜单模块&#xff0c;项目编号T003。 【开源…

如何使用jQuery重定向到另一个网页

在我们开始讨论如何重定向到另一个网页之前,必须明确一点:jQuery 是一个用于 DOM 操作的 JavaScript 库,因此你不应该使用 jQuery 来实现页面重定向。 jQuery 官方网站的某段话: 虽然 jQuery 可能能够在较旧的浏览器版本中运行,但我们并没有主动在这些版本中进行测试,也…

矩阵对角化在机器学习中的奥秘与应用

在机器学习的广阔领域中&#xff0c;矩阵对角化作为一种重要的数学工具&#xff0c;扮演着不可或缺的角色。从基础的线性代数理论到复杂的机器学习算法&#xff0c;矩阵对角化都在其中发挥着重要的作用。 矩阵对角化的概念与原理 矩阵对角化是矩阵理论中的一个基本概念&#x…

vue.config.js配置参考(2024-05-20)

vue.config.js 是一个可选的配置文件&#xff0c;如果项目的 (和 package.json 同级的) 根目录中存在这个文件&#xff0c;那么它会被 vue/cli-service 自动加载。 你也可以使用 package.json 中的 vue 字段&#xff0c;但是注意这种写法需要你严格遵照 JSON 的格式来写。 这…

综合布线管理软件有何作用?

当客户问及“综合布线管理软件究竟有何作用&#xff1f;” 我们通常这样回答&#xff1a; 综合布线管理软件&#xff0c;作为运维管理的得力助手&#xff0c;其核心功能旨在确保布线系统的稳定运行与快速响应。 首先&#xff0c;这款软件通过构建标准化的运维管理流程&#…

Qt for Android

文章 USB Qt for android 获取USB设备列表&#xff08;一&#xff09;Java方式 获取 Qt for android 获取USB设备列表&#xff08;二&#xff09;JNI方式 获取 Qt for android 串口库使用 异常处理 Qt for Android 乱码问题 andoid开发文档 UsbManager&#xff08;apiref.…

四川汇聚荣科技有限公司好不好?

在当今科技飞速发展的时代&#xff0c;企业要想在激烈的市场竞争中脱颖而出&#xff0c;不仅需要先进的技术支持&#xff0c;还需要优质的服务和良好的口碑。那么&#xff0c;四川汇聚荣科技有限公司是否具备这些条件呢?接下来&#xff0c;我们将从公司实力、服务质量、客户反…

win10换ubuntu

1.首先是格式化windows系统&#xff0c;这里用的是恢复出厂设置 2.然后按照下面教程使用u盘来安装ubuntuUbuntu 20.04.2.0 LTS 系统安装过程详解 &#xff08;从下载镜像到安装系统&#xff09;_ubuntu安装教程20.04-CSDN博客 3.然后下面是一些别的准备工作&#xff1a; 1)安…

如何根据系统的业务场景需求定制自己的线程池?

如何根据系统的业务场景需求定制自己的线程池? 1、背景2、生产中应当如何使用线程池才比较合理呢?2.1、指定线程数量2.2、选择合适的工作队列2.3、自定义线程工厂2.4、选择合适的拒绝策略3、自定义线程池代码案例1、背景 线程池有那么多的参数和类型,在实际的开发中,我们应…

达梦授权某个模式给其它用户只读权限

为了在生产环境中将SZSJTJFX模式下的所有对象的只读权限授予XXXX的账号SZJG_CPZLJD&#xff0c;可以通过以下分批处理的脚本来完成。此脚本会遍历SZSJTJFX模式下的所有表和视图&#xff0c;并生成相应的GRANT语句&#xff0c;以避免“过多的对象名前缀”错误。 分批处理的动态…

Python基础内容---上万字总结(回顾自己一年来所有关于python的学习)

Python语言元素之变量 作为一个程序员,可能经常会被外行问到两个问题,其一是“什么是(计算机)程序”,其二是“写(计算机)程序能做什么”,这里我先对这两个问题做一个回答。程序是指令的集合,写程序就是用指令控制计算机做我们想让它做的事情。那么,为什么要用Python…

Java后端面经

1.可重复读&#xff0c;已提交读&#xff0c;这两个隔离级别表现的现象是什么&#xff0c;区别是什么样的&#xff1f; 可重复读&#xff1a;表示整个事务看到的事务和开启后的事务能看到的数据是一致的&#xff0c;既然数据是一致的&#xff0c;所以不存在不可重复读。而且不…