Day17- 二叉树part06

一、最大二叉树

题目一:654.最大二叉树

654. 最大二叉树

给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:

  1. 创建一个根节点,其值为 nums 中的最大值。
  2. 递归地在最大值 左边 的 子数组前缀上 构建左子树。
  3. 递归地在最大值 右边 的 子数组后缀上 构建右子树。

返回 nums 构建的 最大二叉树 

build 函数负责构建二叉树的每个部分。它首先找到当前子数组中的最大值及其索引,然后以这个最大值创建一个新节点作为根节点。之后,函数递归地在最大值左边的子数组上构建左子树,以及在最大值右边的子数组上构建右子树。

/** @lc app=leetcode.cn id=654 lang=cpp** [654] 最大二叉树*/// @lc code=start
/*** 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) {return build(nums, 0, nums.size() - 1);}private:TreeNode* build(const vector<int>& nums, int start, int end) {if (start > end) {return nullptr;}int maxIndex = start;for (int i = start + 1; i <= end; ++i) {if (nums[i] > nums[maxIndex]) {maxIndex = i;}}TreeNode* root = new TreeNode(nums[maxIndex]);root->left = build(nums, start, maxIndex - 1);root->right = build(nums, maxIndex + 1, end);return root;}
};
// @lc code=end

二、合并二叉树

题目一:617. 合并二叉树

617. 合并二叉树

给你两棵二叉树: root1 和 root2 。

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。

返回合并后的二叉树。

注意: 合并过程必须从两个树的根节点开始。

如果 root1root2 中的一个节点为空,则返回另一个节点。

如果两个节点都不为空,则创建一个新节点,其值为两个节点的值之和。然后,递归地合并左子树和右子树。最终返回合并后的树的根节点。

/** @lc app=leetcode.cn id=617 lang=cpp** [617] 合并二叉树*/// @lc code=start
/*** 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* mergeTrees(TreeNode* root1, TreeNode* root2) {if (!root1) return root2;if (!root2) return root1;TreeNode* merged = new TreeNode(root1->val + root2->val);merged->left = mergeTrees(root1->left, root2->left);merged->right = mergeTrees(root1->right, root2->right);return merged;}
};
// @lc code=end

三、二叉搜索树中的搜索

题目一:700. 二叉搜索树中的搜索

700. 二叉搜索树中的搜索

给定二叉搜索树(BST)的根节点 root 和一个整数值 val

你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。

函数递归地在二叉搜索树中搜索特定值:

  • 如果当前节点的值等于目标值,它就返回当前节点。
  • 如果目标值小于当前节点的值,它继续在左子树中搜索;如果目标值大于当前节点的值,它在右子树中搜索。
  • 如果当前节点为空,说明已经达到了叶子节点但没有找到目标值,因此返回null。
/** @lc app=leetcode.cn id=700 lang=cpp** [700] 二叉搜索树中的搜索*/// @lc code=start
/*** 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* searchBST(TreeNode* root, int val) {if (root == nullptr) {return nullptr;}if (root->val == val) {return root;}if (val < root->val) {return searchBST(root->left, val);}return searchBST(root->right, val);}
};
// @lc code=end

四、验证二叉搜索树

题目一:98. 验证二叉搜索树 

98. 验证二叉搜索树

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

  • 节点的左子树只包含 小于 当前节点的数。
  • 节点的右子树只包含 大于 当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

辅助函数 validate,它接受三个参数:当前正在检查的节点、该节点的值应大于的最小值和小于的最大值。

对于根节点,这些值分别被设置为 LONG_MINLONG_MAX(代表最小和最大的长整数值)。函数检查当前节点的值是否在这个范围内。

然后,它递归地调用自己来检查左子树和右子树,更新最小值和最大值的约束。

如果整个树都满足BST的条件,函数返回 true,否则返回 false。 

/** @lc app=leetcode.cn id=98 lang=cpp** [98] 验证二叉搜索树*/// @lc code=start
/*** 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:bool isValidBST(TreeNode* root) {return validate(root, LONG_MIN, LONG_MAX);}private:bool validate(TreeNode* node, long long lower, long long upper) {if (node == nullptr) {return true;}if (node->val <= lower || node->val >= upper) {return false;}return validate(node->left, lower, node->val) && validate(node->right, node->val, upper);}
};
// @lc code=end

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

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

相关文章

一文讲透使用SPSS统计分析软件如何处理缺失值?

推荐采用《SPSS统计分析入门与应用精解&#xff08;视频教学版&#xff09;》 杨维忠、张甜 清华大学出版社“1.9 缺失值处理” 的解答。 本节内容选自《SPSS统计分析入门与应用精解&#xff08;视频教学版&#xff09;》 杨维忠、张甜 清华大学出版社“1.9 缺失值处理”&#…

C++完成使用map Update数据 非二进制

1、在LXMysql.h和LXMysql.cpp分别定义和编写关于pin语句的代码 //获取更新数据的sql语句 where语句中用户要包含where 更新std::string GetUpdatesql(XDATA kv, std::string table, std::string where); std::string LXMysql::GetUpdatesql(XDATA kv, std::string table, std…

数据结构与算法教程,数据结构C语言版教程!(第二部分、线性表详解:数据结构线性表10分钟入门)七

第二部分、线性表详解&#xff1a;数据结构线性表10分钟入门 线性表&#xff0c;数据结构中最简单的一种存储结构&#xff0c;专门用于存储逻辑关系为"一对一"的数据。 线性表&#xff0c;基于数据在实际物理空间中的存储状态&#xff0c;又可细分为顺序表&#xff…

类和对象及其关系

类 类概述&#xff1a; 类是对现实生活中一类具有共同属性和行为事物的抽象类特点&#xff1a; 1、类是对象的数据类型 2、类是具有相同属性和行为的一组对象的集合// 类是对象的数据类型 class Student{}class Test{public static void main(String[] args){// int a 20; 类…

量子计算需要解决哪些复杂问题?

量子计算原理基于量子力学的基本概念和原理&#xff0c;与经典计算在根本上有所不同。以下是量子计算的一些核心原则&#xff1a; 1. 量子比特&#xff08;Qubit&#xff09;&#xff1a;量子计算的基本信息单位是量子比特&#xff0c;或称qubit。不同于经典计算中的比特&…

leetcode贪心(单调递增的数字、监控二叉树)

738.单调递增的数字 给定一个非负整数 N&#xff0c;找出小于或等于 N 的最大的整数&#xff0c;同时这个整数需要满足其各个位数上的数字是单调递增。 &#xff08;当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。&#xff…

Oracle导出CSV文件

利用spool spool基本格式&#xff1a; spool 路径文件名 select col1||,||col2||,||col3||,||col4 from tablename; spool off spool常用的设置&#xff1a; set colsep ;    //域输出分隔符 set echo off;    //显示start启动的脚本中的每个sql命令&#xff0c;缺…

Jvm之垃圾收集器(个人见解仅供参考)

问&#xff1a;什么是垃圾收集算法中的分代收集理论&#xff1f; 答&#xff1a;分代收集理论是垃圾收集算法的一种思想&#xff0c;根据对象存活周期的不同将内存分为几块&#xff0c;一般将java堆分为新生代和老年代。这种理论使得我们可以根据各个年代的特点选择合适的垃圾收…

14.9-时序和组合的混合逻辑——使用非阻塞赋值

时序和组合的混合逻辑——使用非阻塞赋值 1&#xff0c;在一个always块中同时实现组合逻辑和时序逻辑2&#xff0c;将组合和时序逻辑分别写入两个always块中 原则4&#xff1a;在同一个always块中描述时序和组合逻辑混合电路时&#xff0c;用非阻塞赋值。 1&#xff0c;在一个…

Python 可视化 web 神器 streamlit

官网&#xff1a;https://streamlit.io/ github&#xff1a;https://github.com/streamlit/streamlit API 参考&#xff1a;https://docs.streamlit.io/library/api-reference 1、streamlit 简介 streamlit 简介 Streamlit 是Python可视化 web 神器 &#xff0c;是一个开箱即…

Nginx(十六) 配置文件详解 - server stream服务流

本篇文章主要讲 ngx_stream_core_module 模块下各指令的使用方法&#xff0c;Nginx默认未配置该模块&#xff0c;需要用“--with-stream”配置参数重新编译Nginx。 worker_processes auto;error_log /var/log/nginx/error.log info;events {worker_connections 1024; }stream…

宇宙最快最高级且开源的密码破解利器 —— Hashcat

目录 一. 前言 二. Hashcat 安装 2.1. Hashcat 官网下载 2.2. hash 类型识别工具 HashIdentifier 2.3. John The Ripper 三. Hashcat 全部参数 3.1. Hashcat 的攻击模式&#xff08;-a 参数&#xff09; 3.2. 输出格式&#xff08;--outfile-format 参数&#xff09; …

【算法专题】回溯算法

回溯 回溯算法1. 全排列2. 子集3. 找出所有子集的异或总和再求和4. 全排列Ⅱ5. 电话号码的字母组合6. 括号生成7. 组合8. 目标和9. 组合总和10. 字母大小写全排列11. 优美的排列12. N皇后13. 有效的数独14. 解数独15. 单词搜索16. 黄金矿工17. 不同路径III 回溯算法 什么是回溯…

Unity 使用 Plastic 同步后,正常工程出现错误

class Newtonsoft.Json.Linq.JToken e CS0433:类型"JToken"同时存在于"Newtonsoft.Json.Net20,Version3.5.0.0,Cultureneutral,,PublicKeyToken30ad4fe6b2a6aeed"和"Newtonsoft.Json, Version12.0.0.0,Cultureneutral,PublicKeyToken30ad4fe6b2a6aeed…

Rust-使用Serde对json数据进行反序列化

引言 JSON作为目前流行的数据格式之一&#xff0c;被大家广泛使用。在日常的开发实践中&#xff0c;将JSON数据反序列化为对应的类型具有以下几个重要的意义&#xff1a; 1. 访问和操作数据 将JSON数据反序列化为对应的类型&#xff0c;可以更方便地访问和操作数据&#xff0c…

初始Java

目录 前言&#xff1a; 配置环境变量&#xff1a; Java程序的执行&#xff1a; JDK、JRE、JVM之间的关系&#xff1a; 一些概念&#xff1a; 基础语法&#xff1a; main方法&#xff1a; 快捷方法&#xff1a; 注释方法&#xff1a; 符号&#xff1a; 编码格式&am…

打包与解包:Go 中 archive 库的实战应用

打包与解包&#xff1a;Go 中 archive 库的实战应用 引言archive 库概览支持的文件格式archive 库与其他 Go 标准库的协同 使用 archive/tar 打包与解包打包文件到 Tar 归档从 Tar 归档解包文件 使用 archive/zip 进行压缩与解压缩创建 Zip 压缩文件从 Zip 归档解压文件 总结与…

C++ 具名要求-基本概念-指定该对象可以析构

此页面中列出的具名要求&#xff0c;是 C 标准的规范性文本中使用的具名要求&#xff0c;用于定义标准库的期待。 某些具名要求在 C20 中正在以概念语言特性进行形式化。在那之前&#xff0c;确保以满足这些要求的模板实参实例化标准库模板是程序员的重担。若不这么做&#xf…

PythonStudio=vb7国人写的python可视化窗体设计器IDE,可以替代pyqt designer等设计器了

【免费】PythonStudio-1.1.5-x86最新版国人开发的python界面ide&#xff0c;可以制作窗体资源-CSDN文库https://download.csdn.net/download/xiaoyao961/88688447 【免费】PythonStudio-1.1.5-x64-Setup.exe国人开发的python界面ide&#xff0c;可以制作窗体资源-CSDN文库https…

SysML:系统建模语言在复杂系统设计中的应用

一、引言 SysML&#xff0c;即系统建模语言&#xff0c;是一种用于描述和分析复杂系统的标准化建模方法。它的发展起源于对软件开发过程中需求的不断演变和复杂化的认识。SysML的重要性在于它提供了一种统一的建模语言&#xff0c;能够有效地捕捉和表达系统的不同方面&#xf…