代码随想录打卡第十九天

代码随想录–二叉树部分

day 19 二叉树第六天


文章目录

  • 代码随想录--二叉树部分
  • 一、力扣530--二叉搜索树的最小绝对差
  • 二、力扣501--二叉搜索树中的众数
  • 三、力扣--二叉树的最近公共祖先


一、力扣530–二叉搜索树的最小绝对差

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

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。

用昨天的想法,对二叉搜索树中序遍历就能得到递增的数组,计算每个变量之间的差就行了

不过代码随想录在这里使用了双指针法还是挺有意思的

因为实际上中序遍历的结果是数组,对数组求最小差是可以用双指针的,即构建这个数组的同时就计算数组中连续元素的差

代码如下:

class Solution {
public:int result = INT_MAX;TreeNode * pre = nullptr;void traversal(TreeNode * curr){if(!curr) return;traversal(curr->left);if(pre) result = min(curr->val - pre->val, result);pre = curr;traversal(curr->right);}int getMinimumDifference(TreeNode* root) {traversal(root);return result;}
};

算是对双指针加深理解

二、力扣501–二叉搜索树中的众数

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

给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
结点左子树中所含节点的值 小于等于 当前节点的值
结点右子树中所含节点的值 大于等于 当前节点的值
左子树和右子树都是二叉搜索树

正常思路就是中序遍历,再记录每个数字的出现次数,返回即可

所以本质上是统计数组的众数,能不能在构建数组的时候就统计好呢,是可以的,用一个vector来记录这些结果就行

那么只需要在遍历当前节点的时候,判断一下是否与上一个节点一样,一样则计数加一

否则说明是新的数字了,那么计数清0,重新计数

同时判断计数是否是当前最大的,如果相同就记录,大于了就把结果清空,放入新的结果

代码如下:

class Solution {
public:vector<int> result;int maxCount = 0;int currCount = 0;TreeNode * pre = nullptr;void traversal(TreeNode * curr){if(!curr) return;traversal(curr->left);if(!pre) currCount = 1;else if(pre->val == curr->val) currCount++;else currCount = 1;pre = curr;if(currCount == maxCount) result.push_back(curr->val);if(currCount > maxCount){maxCount = currCount;result.clear();result.push_back(curr->val);}traversal(curr->right);}vector<int> findMode(TreeNode* root) {currCount = 0;maxCount = 0;pre = nullptr;result.clear();traversal(root);return result;}
};

三、力扣–二叉树的最近公共祖先

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

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。

这种涉及深度搜索的问题,应当自然地想到回溯法,尤其是需要自下而上的搜索时,基本上就是回溯法了

而设计递归算法的思路是,递归检查左右子树,当检查到q,就返回q,检查到p,就返回p,如果两个树的返回均不为空,说明本节点是最近祖先,就返回本节点

如果左子树为空,右子树不为空,就返回右子树,另外一种情况同理

因为如果搜索到了之后,祖先节点会作为本次递归的结果返回上去,没搜索到就是null,那么只要把这个节点继续往回传就行

如果写成栈就更容易理解了,一层一层传递上去

代码如下:

 class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (root == q || root == p || root == NULL) return root;TreeNode* left = lowestCommonAncestor(root->left, p, q);TreeNode* right = lowestCommonAncestor(root->right, p, q);if(left && right) return root;else if(left) return left;else if(right) return right;else return NULL;}   
};

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

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

相关文章

java中 使用数组实现需求小案例(二)

Date: 2024.07.09 16:43:47 author: lijianzhan 需求实现&#xff1a; 设计一个java类&#xff0c;java方法&#xff0c;使用Random函数&#xff0c;根据实现用户输入随机数生成一个打乱的数组。 package com.lin.java.test;import java.util.Arrays; import java.util.Rando…

futures.index(future)用法

futures.index(future) 这一行代码用于在 futures 列表中查找已完成的 Future 对象 future 的索引。该索引代表这个 Future 对象在 futures 列表中的位置。 详细解释 假设 futures 列表中有多个 Future 对象&#xff0c;每个 Future 对象都代表一个异步任务。在 as_completed…

TAGE predictor

参考文档&#xff1a;分支预测算法&#xff08;一&#xff09;&#xff1a;TAGE|SunnyChen的小窝 TAGE的基础概念 TAGE是现今最经典的分支预测算法&#xff0c;TAGE及其后续的变体都是当今高性能微处理器的分支预测算法基础。因此&#xff0c;要聊分支预测算法的话题必定绕不开…

数据库doris中的tablet底层解析

在Doris中,tablet(数据片)是数据存储和管理的最小单元。理解tablet的底层原理有助于更好地理解Doris的高可用性、负载均衡和查询优化等特性。 Tablet 的概念 Tablet:Tablet是Doris中用于存储数据的最小物理单元。每个tablet通常对应于一个数据分区和一个分桶组合的子集。…

uniapp内置组件uni.navigateTo跳转后页面空白问题解决

文章目录 导文空白问题 导文 在h5上跳转正常 但是在小程序里面跳转有问题 无任何报错 页面跳转地址显示正确&#xff0c;但页面内容为空 空白问题 控制台&#xff1a; 问题解决&#xff1a; 方法1&#xff1a; 可能是没有注册的问题&#xff0c;把没注册的页面 注册一下。 方…

数据库基础练习4

准备 create table dept (dept1 int ,dept_name varchar(11)) charsetutf8; create table emp (sid int ,name varchar(11),age int,worktime_start date,incoming int,dept2 int) charsetutf8;insert into dept values(101,财务),(102,销售),(103,IT技术),(104,行政);INSERT …

WANGLS

DHCP 动态主机配置协议 原理 网络 网络是双向的,网络是有方向的 广播;广播是由种类的,广播是有范围的的 租约的建立——租约的相应、租约的选择——租约的完成 租约的建立:租约的请求 有客户端发出 DHCP discover 广播、寻找服务器 租约的响应 收到响应,不是服务器,…

模块一SpringBoot(一)

maven记得配置本地路径和镜像 IJ搭建 SpringIntiallizer--》将https://start.spring.io改成https://start.aliyun.com/ 项目结构 Spring有默认配置&#xff0c; application.properties会覆盖默认信息&#xff1a; 如覆盖端口号server.port8888

提升校园管理效率!智慧校园人事管理的职工培训功能解析

在智慧校园的构建框架下&#xff0c;人事管理系统中关于职工培训的部分&#xff0c;扮演了一个促进师资力量成长与个人职业规划深度融合的角色。这一模块细腻地融合了现代教育的需求与教职工个人发展的期望&#xff0c;为提升教学团队的整体实力铺设了一条高效路径。 首先&…

为什么3d模型在透视里面闪烁?---模大狮模型网

在展览3D模型设计中&#xff0c;透视效果是展示空间深度和立体感的重要手段。然而&#xff0c;有时候我们会面对3D模型在特定透视角度下出现闪烁或者失真的问题。本文将深入探讨这一现象的原因及解决方法&#xff0c;帮助设计师们更好地理解和处理这类挑战。 一、为什么3D模型在…

哪个充电宝口碑比较好?怎么选充电宝?2024年口碑优秀充电宝推荐

在如今快节奏的生活中&#xff0c;充电宝已然成为我们日常生活中的必备品。然而&#xff0c;市场上充电宝品牌众多&#xff0c;质量参差不齐&#xff0c;如何选择一款安全、可靠且口碑优秀的充电宝成为了消费者关注的焦点。安全性能不仅关系到充电宝的使用寿命&#xff0c;更关…

记一次mysql迁移Kingbase8

目录 一、下载Kingbase工具二、客户端安装三、数据库开发管理工具 KStudio3.1 主界面3.2 导出数据库建表语句DDL3.3 导出数据 四、数据迁移工具 KDTS4.1 启动KDTS4.2 新建源数据库4.3 新建目标数据库4.4 迁移任务管理 一、下载Kingbase工具 kingbase数据库服务&#xff08;内置…

集合面试题

1. 什么是集合 集合就是一个放数据的容器&#xff0c;准确的说是放数据对象引用的容器 集合类存放的都是对象的引用&#xff0c;而不是对象的本身 集合类型主要有 3 种&#xff1a; set( 集&#xff09;、 list( 列表&#xff09;和 map( 映射 ) 。 2. 集合的特点 集合的特…

固定的过程数据配置和PDO属性设置的实现及其重要性

固定的过程数据配置和PDO属性设置的实现及其重要性 在自动化系统中&#xff0c;EtherCAT从站设备的配置至关重要。为了确保设备的行为是可预测且一致的&#xff0c;过程数据配置必须是固定的。本文将介绍如何在SCI&#xff08;子设备信息&#xff09;文件中实现固定的过程数据…

监控CPU使用情况,内存+I/O

CPU占用 在Linux系统中&#xff0c;可以使用以下命令来实时监控GPU的内存使用情况&#xff1a; watch -n 1 nvidia-smi这个命令会每秒刷新一次nvidia-smi的输出&#xff0c;这样就可以实时看到GPU的内存使用情况了。 IO 对于IO监控&#xff0c;可以使用iotop命令。这个命令…

软件架构之系统性能评价

软件架构之系统性能评价 第 5 章 系统性能评价5.1 性能指标5.1.1 计算机 5.1.2 网络5.3 性能设计5.3.1 阿姆达尔解决方案5.3.2 负载均衡 5.4 性能评估5.4.1 基准测试程序5.4.2 Web 服务器的性能评估5.4.3 系统监视 第 5 章 系统性能评价 系统性能是一个系统提供给用户的众多性…

四川赤橙宏海商务信息咨询有限公司引领行业发展

随着数字经济的飞速发展&#xff0c;电商行业已成为推动经济增长的重要引擎。在这个大背景下&#xff0c;四川赤橙宏海商务信息咨询有限公司凭借其对抖音电商服务的深度洞察和专业能力&#xff0c;迅速崛起为行业内的佼佼者&#xff0c;为广大企业提供了全方位的电商服务解决方…

Linux学习笔记(二)账户和组

一、基本概念 用 户&#xff1a;用户id&#xff0c;被称为UID 基本组&#xff1a;账户id&#xff0c;被称为GID。用户只能加一个基本组。 0代表超级管理员&#xff0c;root账号。 附加组&#xff1a;用户能加多个基本组。 二、添加账户和组 创建用户名tom&#xff0c;失效…

聚鼎装饰画:装饰画店铺怎么取名

在如今这个充满创意与个性表达的时代&#xff0c;为一家装饰画店铺取名不仅是一个简单的标识过程&#xff0c;它更像是一场精心策划的创意展示。店名不仅承载着商家的期待&#xff0c;也预示着店铺未来的发展方向和市场定位。那么&#xff0c;如何巧妙地为装饰画店铺命名呢? 店…

【模板模式(Template Pattern)】

一级标题 二级标题 三级标题 四级标题 五级标题 六级标题