LeetCode 热题 100 | 二叉树(中下)

目录

1  基础知识

1.1  队列 queue

1.2  栈 stack

1.3  常用数据结构

1.4  排序

2  98. 验证二叉搜索树

3  230. 二叉搜索树中第 K 小的元素

4  199. 二叉树的右视图


菜鸟做题忘了第几周,躺平过了个年TT

1  基础知识

1.1  队列 queue
  1. queue<type> q:定义一个参数类型为 type 的队列
  2. q.push(variable):在队尾插入一个元素
  3. q.pop():删除队列第一个元素
  4. q.size():返回队列中元素个数
  5. q.empty():如果队列空则返回 true
  6. q.front():返回队列中的第一个元素
  7. q.back():返回队列中最后一个元素

1.2  栈 stack
  1. stack<type> s:定义一个参数类型为 type 的栈
  2. s.push(variable):压栈,无返回值
  3. s.emplace():压栈,无返回值(参见原文)
  4. s.pop():栈顶元素出栈,不返回元素,无返回值
  5. s.top():返回栈顶元素,该元素不出栈
  6. s.empty():判断栈是否为空,是返回 true
  7. s.size():返回栈中元素数量

参考博客:C++ 栈(stack)使用简述

1.3  常用数据结构
  • vector<type> v + push_back
  • unordered_set<type> s + insert
  • unordered_map<type, type> m

1.4  排序

总是忘记如何调用 sort()。。。

假设 vals 是一个容器。sort() 没有返回值,vals 里面就已经是排好的顺序了。

sort(vals.begin(), vals.end())

2  98. 验证二叉搜索树

题眼:

  • 节点左子树中的所有节点 比当前节点小
  • 节点右子树中的所有节点 比当前节点大

解题思路:

针对位于左子树的节点,判断它是否大于 leftMax;针对位于右子树的节点,判断它是否小于 rightMin;违反任一原则,都不是有效二叉搜索树。

思路说明图:

当前节点(蓝色)作为分界线,一是作为其左子树(绿色)所有节点的上限,二是作为其右子树(黄色)所有节点的下限。当处理到 “6” 这节点时,它同样地,一是作为其左子树(“3”)所有节点的上限,二是作为其右子树(“8”)所有节点的下限。

对于节点 “3”,它的下限是 “5”,上限是 “6”;对于节点 “8”,它的下限是 “6”,没有上限。

class Solution {
public:bool helper(TreeNode* root, long long leftMax, long long rightMin) {if (!root) return true;if (root->val >= leftMax || root->val <= rightMin) return false;return helper(root->left, root->val, rightMin)&& helper(root->right, leftMax, root->val);}bool isValidBST(TreeNode* root) {return helper(root, LONG_MAX, LONG_MIN);}
};

说明:什么是 LONG_MAX、LONG_MIN?

c++ 中最大值最小值的设定

3  230. 二叉搜索树中第 K 小的元素

解题思路:

  1. 遍历二叉树,将所有节点的数值存入一个数组中
  2. 使用 sort 对数组进行排序
  3. 返回 K - 1 号元素
class Solution {
public:vector<int> vals;void helper(TreeNode * root) {if (!root) return;vals.push_back(root->val);helper(root->left);helper(root->right);}int kthSmallest(TreeNode* root, int k) {helper(root);sort(vals.begin(), vals.end());return vals[k - 1];}
};

4  199. 二叉树的右视图

直接参照 102. 二叉树的层序遍历

解题思路:

  • 按 “层” 来遍历二叉树
  • 从右向左将同一层的节点的左右子节点插入到队列中
  • 在下一 “层” 循环中,队列将从右到左弹出下一 “层” 的所有节点
  • 将下一 “层” 的最右侧节点的值插入到数组中

思路说明:

首先将 “5” 插入到队列中。在 “5” 所处的 “层” 的循环中,弹出 “5”,依次将 “5” 的右子节点 “6” 和左子节点 “3” 插入到队列中。由于 “5” 是第一个弹出的节点,因此还要将其值插入到数组中。循环结束。接下来,在 “6” 所处的 “层” 的循环中,弹出 “6”,依次将 “6” 的右子节点和左子节点插入到队列中。由于 “6” 是第一个弹出的节点,因此还要将其值插入到数组中。再弹出 “3”,以此类推,……,直到循环结束。

class Solution {
public:vector<int> rightSideView(TreeNode* root) {if (!root) return {};vector<int> vals;queue<TreeNode *> q;q.push(root);while (!q.empty()) {int currentLevelSize = q.size();for (int i = 0; i < currentLevelSize; ++i) {TreeNode * node = q.front();q.pop();if (i == 0) vals.push_back(node->val);if (node->right) q.push(node->right);if (node->left) q.push(node->left);}}return vals;}
};

说明:以下代码用于判断当前节点是否是最右侧节点

if (i == 0)

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

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

相关文章

点云配准SIFT+SI+RANSAC+ICP

SIFT、RANSAC和ICP都介绍够了,就不赘述了,简单说以下SI特征描述子。主要是分享一下代码。 1 Spin Image(SI)特征描述子简介 Spin Image(SI)是一种用于点云数据描述的特征描述子,广泛应用于三维点云配准、识别和重建等领域。它能够捕捉点云中的局部几何信息,具有旋转不…

docker搭建现成的靶场

Docker安装&#xff1a; apt-get install docker.ioUpload-labs——文件上传靶场搭建&#xff1a; ​ 因为Docker hub上存在镜像源&#xff0c;所以&#xff0c;索性直接拉取过来&#xff0c; docker pull c0ny1/upload-labs​ 等到下载完成之后&#xff0c;就可以创建容器&…

个人建站前端篇(五)插件unplugin-vue-components的使用

unplugin-vue-components 是由 Vue官方人员开发的一款自动引入插件&#xff0c;可以省去比如 UI 库的大量 import 语句。 unplugin-vue-components 插件可以在Vue文件中自动引入组件&#xff08;包括项目自身的组件和各种组件库中的组件&#xff09;使用此插件后&#xff0c;不…

新鼠标的长宽高

今天的鼠标终于开始追求轻量化了&#xff0c;博主手比较小&#xff0c;一直追求最小最轻的鼠标&#xff0c;本表格收集主流鼠标的长宽高&#xff0c;如果不全可以楼主加上&#xff1a; 名称 长 宽 高 重量 雷蛇炼狱蝰蛇 迷你版 118 53 38 61 雷蛇炼狱蝰蛇 V2 迷你版…

【办公类-16-07-04】合并版“2023下学期 中班户外游戏(有场地和无场地版,一周一次)”(python 排班表系列)

背景需求&#xff1a; 把 无场地版&#xff08;贴周计划用&#xff09; 和 有场地版&#xff08;贴教室墙壁上用&#xff09; 组合在一起&#xff0c;一个代码生成两套。 【办公类-16-07-02】“2023下学期 周计划-户外游戏 每班1周五天相同场地&#xff0c;6周一次循环”&…

论文阅读——ONE-PEACE

ONE-PEACE: EXPLORING ONE GENERAL REPRESENTATION MODEL TOWARD UNLIMITED MODALITIES 适应不同模态并且支持多模态交互。 预训练任务不仅能提取单模态信息&#xff0c;还能模态间对齐。 预训练任务通用且直接&#xff0c;使得他们可以应用到不同模态。 各个模态独立编码&am…

Maxwell安装部署

1 Maxwell输出格式 database&#xff1a;变更数据所属的数据库table&#xff1a;变更数据所属的表type&#xff1a;数据变更类型ts&#xff1a;数据变更发生的时间xid&#xff1a;事务idcommit&#xff1a;事务提交标志&#xff0c;可用于重新组装事务data&#xff1a;对于inse…

无人机数据链技术,无人机数据链路系统技术详解,无人机数传技术

早期的无人机更多的为军事应用服务&#xff0c;如军事任务侦查等&#xff0c;随着技术和社会的发展&#xff0c;工业级无人机和民用无人机得到快速的发展&#xff0c;工业级无人机用于农业植保、地理测绘、电力巡检、救灾援助等&#xff1b;民用无人机用于航拍、物流等等领域。…

【WPF】获取父控件数据

MaxHeight"{Binding PathActualHeight, RelativeSource{RelativeSource ModeFindAncestor, AncestorTypeUserControl}}" 参考文献 https://www.cnblogs.com/-Timosthetic/p/16021865.html

美国Mercari煤炉注册教程,还不快来Get!

想要掘金全球电商市场&#xff0c;美国的Mercari平台绝对值得关注。Mercari&#xff0c;也被称作煤炉&#xff0c;类似于我们国内的闲鱼二手交易平台&#xff0c;它同时拥有美国和日本两个市场。其中&#xff0c;美国市场的消费需求稳定且持续增长&#xff0c;成为了许多跨境电…

医卫医学试题及答案,分享几个实用搜题和学习工具 #笔记#笔记#微信

收录了大量考试类型的题库&#xff0c;大到考公&#xff0c;小到知识竞赛&#xff0c;题库资源算是比较丰富的了。操作起来也不难&#xff0c;我们只需输入题目内容&#xff0c;即可快速搜索出答案&#xff0c;而且它在给出答案的同时还会附带解析。最重要的是&#xff0c;搜题…

​LeetCode解法汇总105. 从前序与中序遍历序列构造二叉树

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; 给定两个整…

2024年【N1叉车司机】考试题及N1叉车司机新版试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 N1叉车司机考试题是安全生产模拟考试一点通总题库中生成的一套N1叉车司机新版试题&#xff0c;安全生产模拟考试一点通上N1叉车司机作业手机同步练习。2024年【N1叉车司机】考试题及N1叉车司机新版试题 1、【多选题】…

【Linux系统化学习】动静态库 | 软硬链接

目录 硬链接和软链接 硬链接 软链接 动态库和静态库 静态库 静态库的生成 静态库的使用 将库打包和使用 动态库 动态库的生成 动态库的使用 库搜索路径 硬链接和软链接 硬链接 上篇文章我们说到真正找到磁盘上的文件并不是文件名&#xff0c;而是inode。其实在…

CF1731D Valiant‘s New Map 题解

文章目录 CF1731D Valiants New Map 题解Valiants New Map题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示算法&#xff1a;二分二维前缀和代码&#xff1a; CF1731D Valiant’s New Map 题解 link Valiant’s New Map 题面翻译 给定一个带权值的 n …

Adobe Ai下载安装免费(矢量图形编辑软件Ai安装包下载2024【Windows版】)

Adobe全家桶下载方式 Ae下载 Pr下载 Ai下载 将持续更新~ 文章目录 Adobe全家桶下载方式Ai下载方式【点我获取下载链接】我们的网站一、Ai简介二、链接内容包含1.Ai软件 声明 Ai下载方式【点我获取下载链接】 百度网盘下载&#xff1a;百度网盘下载方式夸克网盘下载&#xff…

Day 6.文件属性和权限的获取

时间获取 1.time time_t time(time_t *tloc); 功能&#xff1a; 返回1907-1-1到现在的秒数&#xff08;格林威治时间&#xff09; 参数&#xff1a; tloc&#xff1a;存放秒数空间的首地址 返回值&#xff1a; 成功返回秒数 失败返回-1 2.localtime struct tm *loca…

Python入门:常用模块—logging模块

logging日志的分级&#xff1a; debug(),info(),warning(),error(),critical() 5个级别 最简单用法 1 2 3 4 import logging logging.warning("user [mike] attempted wrong password more than 3 times") logging.critical("server is down") 输出&…

Day49 647 回文子串 516 最长回文子序列

647 回文子串 给定一个字符串&#xff0c;你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会被视作不同的子串。 方法一&#xff1a;动态规划&#xff1a; 采用一个二维的dp数组&#xf…

普中51单片机学习(二)

51单片机介绍 所需基础知识 基础数模电知识&#xff0c;简单的C语言。 PS&#xff1a;如果有不懂的直接通义千问。。。 什么是单片机 在一片集成电路芯片上集成微处理器、存储器、I/O接口电路&#xff0c;从而构成了单芯片微型计算机&#xff0c;即单片机。 学习方法 多实…