代码随想录打卡第十八天

代码随想录–二叉树部分

day 17 休息日
day 18 二叉树第五天


文章目录

  • 代码随想录--二叉树部分
  • 一、力扣654--最大二叉树
  • 二、力扣617--合并二叉树
  • 三、力扣700--二乘树中的搜素
  • 四、力扣98--验证二叉搜索树


一、力扣654–最大二叉树

代码随想录题目链接:代码随想录

给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:
创建一个根节点,其值为 nums 中的最大值。
递归地在最大值 左边 的 子数组前缀上 构建左子树。
递归地在最大值 右边 的 子数组后缀上 构建右子树。
返回 nums 构建的 最大二叉树 。

题目已经把思路写出来了,正常找最大值下标然后分割数组就行,和构建二叉树一模一样

代码如下:

class Solution {
public:TreeNode* constructMaximumBinaryTree(vector<int>& nums) {if(nums.empty()) return nullptr;int maxIndex = 0;for(int i = 0; i < nums.size(); i ++){if(nums[i] > nums[maxIndex]) maxIndex = i;}vector<int> leftTreeNums(nums.begin(), nums.begin() + maxIndex);vector<int> rightTreeNums(nums.begin() + maxIndex + 1, nums.end());TreeNode * curr = new TreeNode(nums[maxIndex]);curr->left = constructMaximumBinaryTree(leftTreeNums);curr->right = constructMaximumBinaryTree(rightTreeNums);return curr;}
};

二、力扣617–合并二叉树

代码随想录题目链接:代码随想录

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

思路比较清楚,用递归,每次传入root1和root2,那就对他们比较:
1、如果有一个为空而另一个不为空,说明后面都不用合并了,空树和非空树合并,结果就是非空树本身
2、如果两个都为空,那么返回空树,0+0=0,很合理的
3、如果两个都不为空,那么把val加起来放给root1,并且让root1的左右子树继续递归合并即可

代码如下:

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

三、力扣700–二乘树中的搜素

代码随想录题目链接:代码随想录

给定二叉搜索树(BST)的根节点 root 和一个整数值 val。
你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。

本题就是对二叉搜索树的模拟使用,二叉搜索树意思是左节点值<中节点值<右节点值的树

代码如下:

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

四、力扣98–验证二叉搜索树

代码随想录题目链接:代码随想录

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。

这个题不能单纯地比较节点数字大小,因为有可能存在这种情况:
在这里插入图片描述
所以要对这个树进行整体地判断,而不能一颗一颗去判断,可能子树是二叉搜索树,但是整个树就不是了

而注意到,如果这个树是二叉搜索树,那么它的中序遍历一定是递增的,所以只要进行一个中序遍历,再进行递增判断即可

代码如下:

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

写的时候还忘了递归中序遍历的写法了,补上模板:

    void trans(TreeNode* curr, vector<int> & result){if(curr == nullptr) return;trans(curr->left, result);       // 左result.push_back(curr->val);     // 中trans(curr->right, result);      // 右}// 根据前中后序遍历分别改为:中左右、左中右、左右中的顺序即可

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

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

相关文章

初识CPlusPlus

前言 也是好久没写博客了&#xff0c;那些天也没闲着&#xff0c;去练题去了。实际上练题也可以写练题的博客&#xff0c;但是觉得太简单了些&#xff0c;于是就没有继续写下去。如今又回来写博客&#xff0c;是因为有整理了新的知识C。内容不算多&#xff0c;大多数都是书本上…

【C++ 】中类的成员函数和析构函数的作用

在C中&#xff0c;类的成员函数和析构函数各自扮演着不同的角色&#xff0c;它们对于类的对象的生命周期管理和行为实现至关重要。 成员函数 成员函数是类的一部分&#xff0c;它们允许你定义类的行为&#xff0c;包括但不限于&#xff1a; 操作数据成员&#xff1a;成员函数…

Spring-事务(三)

作者&#xff1a;月下山川 公众号&#xff1a;月下山川 1、什么是事务 数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列&#xff0c;这些操作要么全部执行,要么全部不执行&#xff0c;是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的…

证件照片换背景底色 免费 证件照片制作软件免费下载 证件照换衣服软件免费有哪些好用

证件照是我们身份认证的重要凭证&#xff0c;其质量和专业性都很重要。然而&#xff0c;很多时候&#xff0c;由于各种原因&#xff0c;我们可能无法在拍摄证件照时穿上合适的服装&#xff0c;这就给证件照的质量和形象带来了一定的影响。幸运的是&#xff0c;现在市面上出现了…

【保姆级介绍下C语言中的运算符的优先级】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 🧇C语言中的运算符的优先级 🧇C语言中的运算符的优先级决定了表达…

DOM(文档对象模型)生命周期事件

前言 DOM 生命周期事件涉及到从创建、更新到销毁 DOM 元素的不同阶段。 ● 我们来看下当HTML文档加载完再执行JavaScript代码 document.addEventListener(DOMContentLoaded, function (e) {console.log(HTML parsed adn DOM tree built!, e); })● 除此之外&#xff0c;浏览…

Codeforces Round 925 (Div. 3) D-F

Divisible Pairs 你有两个整数 x , y x,y x,y 和一个长为 n n n 的数组 a a a。 你需要求出有多少个正整数对 ( i , j ) (i,j) (i,j) 满足&#xff1a; 1 ≤ i < j ≤ n 1 \le i < j \le n 1≤i<j≤n a i a j a_i a_j ai​aj​ 可被 x x x 整除 a i − a j a…

使用ADB命令控制logcat日志本地存储功能

使用ADB命令控制logcat日志本地存储功能 1. 需求背景 在 Android 系统上进行开发调试时&#xff0c;为了分析 bug&#xff0c;很多场景需要抓取开机log。 使用GUI界面的工程模式/开发者选项可以打开 logcat 日志的本地存储功能&#xff0c;从而可以很方便的抓取完整的开机日…

单链表(C语言详细版)

1. 链表的概念及结构 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表的结构跟火车车厢相似&#xff0c;淡季时车次的车厢会相应减少&#xff0c;旺季时车次的车厢会额外增加几节。…

3.结果映射ResultMap(关联association+collection)

结果映射ResultMap 一.结果映射 是 MyBatis 中最重要最强大的元素,简化代码,允许JDBC不支持的一些操作 1.常用属性 constructor - 用于在实例化类时&#xff0c;注入结果到构造方法中 &#xff08;一般不用&#xff09; idArg - ID 参数&#xff1b;标记出作为 ID 的结果可…

Day65 代码随想录打卡|回溯算法篇---组合总和II

题目&#xff08;leecode T40&#xff09;&#xff1a; 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含…

Linux文件编程(打开/创建写入读取移动光标)

目录 一、如何在Linux下做开发 1.vi编辑器 2.gcc编译工具 3.常用指令 二、文件打开及创建 三、写入文件 四、读取文件 五、文件“光标”位置 一、如何在Linux下做开发 所谓文件编程&#xff0c;就是对文件进行操作&#xff0c;Linux的文件和Windows系统的文件大差不差…

Python函数 之 函数基础

print() 在控制台输出 input() 获取控制台输⼊的内容 type() 获取变量的数据类型 len() 获取容器的⻓度 (元素的个数) range() ⽣成⼀个序列[0, n) 以上都是我们学过的函数&#xff0c;函数可以实现⼀个特定的功能。我们将学习⾃⼰如何定义函数, 实现特定的功能。 1.函数是什么…

剑指offer,打印从1到最大的n位数

这道题重点考察的就是我们的大数打印&#xff0c;因为如果按照普通的整形去循环打印的话&#xff0c;碰见n10的情况下就会超出整形的范围了&#xff0c;所以我们使用字符串进行打印&#xff0c;确切的说是使用字符进行打印&#xff0c;代码如下所示&#xff1a; public static…

EtherCAT主站IGH-- 11 -- IGH之fmmu_config.h/c文件解析

EtherCAT主站IGH-- 11 -- IGH之fmmu_config.h/c文件解析 0 预览一 该文件功能`fmmu_config.c` 文件功能函数预览二 函数功能介绍1. `ec_fmmu_config_init`2. `ec_fmmu_set_domain_offset_size`3. `ec_fmmu_config_page`示例用法示例详细说明三 h文件翻译四 c文件翻译该文档修改…

数据库sql语句中exists关键字的用法及原理

一、EXISTS关键字是做什么的&#xff1f; EXISTS是SQL语句中的一个关键字&#xff0c;用于判断一个子查询是否返回了任何行。如果子查询返回的结果集非空&#xff0c;EXISTS返回TRUE&#xff0c;否则返回FALSE。 二、EXISTS的基本语法示例&#xff1a; SELECT column1, colu…

氛围感视频素材高级感的去哪里找啊?带氛围感的素材网站库分享

亲爱的创作者们&#xff0c;大家好&#xff01;今天我们来聊聊视频创作中至关重要的一点——氛围感。一个好的视频&#xff0c;不仅要有视觉冲击力&#xff0c;还要能够触动观众的情感。那我们应该去哪里寻找这些充满氛围感且高级的视频素材呢&#xff1f;别急&#xff0c;我这…

打开IDEA,程序员思考的永远只有两件事!!!

微信公众号&#xff1a;牛奶 Yoka 的小屋 有任何问题。欢迎来撩~ 最近更新&#xff1a;2024/07/09 [大家好&#xff0c;我是牛奶。] 当年面试时背了很多八股文&#xff0c;但在日渐重复的机械工作中&#xff08;产品业务开发&#xff09;&#xff0c;计算机网络、操作系统、算…

混合贪心算法求解地铁线路调度

一、问题描述 城市轨道交通的繁荣发展&#xff0c;带来了车辆资源需求的日益增加。如何兼顾运营服务水平和运营成本&#xff0c;以最少的车底优质地完成运输任务成为一大严峻问题。本题在后续的描述中将由多辆动车和拖车组合而成的车组称为车底。在日常的运营组织中&#xff0…

【文档智能】LACE:帮你自动生成文档布局的方法浅尝

前言 往期很多文章都介绍了【文档智能】上布局识别&#xff08;版式分析&#xff09;的技术思路&#xff0c;版式分析是通过对文档版式进行布局识别&#xff0c;识别文档中的元素类型的过程。这次来看看一个有趣的思路&#xff0c;通过已有的元素类型&#xff0c;来生成可控的…