Day54 代码随想录打卡|二叉树篇---二叉搜索树的最近公共祖先

题目(leecode T235):

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

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

例如,给定如下二叉搜索树:  root = [6,2,8,0,4,7,9,null,null,3,5]

方法:寻找二叉搜索树的最近公共祖先,因为二叉搜索树是有序的,我们寻找给定的节点时,就不是无序的乱找。而是可以沿着指定的方向,这是相比较普通二叉树的优势。分析该种方式的递归三要素。

1:传入参数和返回值:传入的是两个节点和根节点,返回的是找到的祖先节点。

2:终止条件:当遇到了空节点时就可以返回

3:单层处理逻辑:因为我们是要找到p->val与q->val中间的部分(包括这两点),那么如果 cur->val 大于 p->val,同时 cur->val 大于q->val,那么就应该向左遍历(说明目标区间在左子树上)。并且因为我们不知道p和q谁比较大,所以我们两个都要比较。

题解:
 

class Solution {
private:TreeNode* traversal(TreeNode* cur, TreeNode* p, TreeNode* q) {if (cur == NULL) return cur;  // 中if (cur->val > p->val && cur->val > q->val) {       // 左递归TreeNode* left = traversal(cur->left, p, q);if (left != NULL) {return left;}}if (cur->val < p->val && cur->val < q->val) {        // 右递归TreeNode* right = traversal(cur->right, p, q);if (right != NULL) {return right;}}return cur;}
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {return traversal(root, p, q);}
};

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

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

相关文章

Nginx负载均衡之负载均衡策略

负载均衡技术是将大量的客户端请求通过特定的策略分配到集群中的节点&#xff0c;实现快速响应的应用技术。在应对高并发的应用请求时&#xff0c;单节点的应用服务计算能力有限&#xff0c;无法满足客户端的响应需求&#xff0c;通过负载均衡技术&#xff0c;可以将请求分配到…

DAY 45 企业级虚拟化技术KVM

企业级虚拟化技术KVM 1.kvm是什么 kernel virtualization machine 内核虚拟机 qemu的二次开发 软件全拼 qemu-kvm kvm virtulbox ovm vmware vsphere套件&#xff08;vmawre-esxi&#xff09; microsoft hyper-V 2.什么是虚拟化 资源利用 资源隔离 虚拟化管理&…

CleanMyMac X for Mac系统优化垃圾清理软件卸载 工具(小白轻松上手,简单易学)

Mac分享吧 文章目录 效果一、准备工作二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、启动台显示软件图标&#xff0c;表示安装成功 三、运行测试1、打开软件&#xff0c;配置2、授权&#xff0c;允许完全磁盘访问 安装完成&a…

驱动、BSP、HAL三者的区别和联系

目录 引言 一、驱动&#xff08;Driver&#xff09; 二、板级支持包&#xff08;BSP, Board Support Package&#xff09; 三、硬件抽象层&#xff08;HAL, Hardware Abstraction Layer&#xff09; 四、区别与联系 五、总结 引言 驱动&#xff08;Driver&#xff09;、板…

正规式理解

正规式&#xff08;Regular Expression&#xff09;是一种用于描述、识别字符串集合的模式&#xff08;尤其是正则语言&#xff09;的序列表达式。在软件设计中&#xff0c;正规式被广泛用于文本处理、搜索和替换、数据验证等场景。以下是对正规式的基本理解&#xff1a; 1. *…

django filter 数据 Response返回

在Django中&#xff0c;你可以使用Django的filter()方法来筛选查询集(QuerySet)&#xff0c;并将结果返回给客户端。以下是一个简单的例子&#xff0c;展示了如何在Django视图中筛选数据&#xff0c;并将结果以JSON的形式返回给客户端。 首先&#xff0c;确保你有一个Django模…

vue3 defineComponent + 渲染函数h + 全局注册​

defineComponent 是 Vue 3 中的一个函数&#xff0c;用于定义一个组件。它是 Vue 3 的组合式 API 的一部分&#xff0c;提供了一种更加灵活和组织化的方式来定义组件。在 Vue 2 中&#xff0c;我们通常使用一个对象来定义组件&#xff0c;而在 Vue 3 中&#xff0c;defineCompo…

赶走异味保持清香,何浩明净味爽身香体膏

夏天来了&#xff0c;大家都想要清清爽爽的出门&#xff0c;但是汗味、狐臭这些小问题都在所难免&#xff0c;总要想办法应对&#xff0c;我目前用的是一款香体膏&#xff0c;它不仅能赶走那些让人尴尬的异味&#xff0c;还能让我们享受一整天的清新自在。 我用的这款叫做何浩明…

解决接入sleuth链路追踪后xxl-job定时任务的日志无日志问题

问题背景 随着业务规模的不断的增大, 系统的复杂度也越来越高, 公司软件架构也进入到了分布式微服务的阶段, 在这样的情况下每一次请求都有可能跨越多个项目&#xff0c; 传统的日志监控方式无法满足调用链路追踪, 这就导致问题定位/诊断服务变得复杂。所以我们引入了sleuth这一…

STM32MP135裸机编程:配置RCC,修改主频到1GHz

0 工具准备 STM32CubeMX v6.11.1 STM32CubeIDE v1.15 STM32CubeProgrammer v2.16.0 STM32MP13xx参考手册 STM32MP13勘误手册 STM32MP135AD数据手册 正点原子stm32MP135开发板 1 确认时钟源 本例使用的时钟源均由外部晶振提供&#xff0c;分别是24MHz的HSE、32.768KHz的LSE。原…

重学java 74.Lombok的使用

少点心气&#xff0c;多点干劲 —— 24.6.18 一、lombok的安装使用 1.作用: 简化javabean开发 2.使用: a.下插件 ->如果是idea2022不用下载了,自带 b.导lombok的jar包 安装教程&#xff1a; http://t.csdnimg.cn/wq9MM c.修改设置 二、lombok的介绍 Lombok通过增加一…

gitlab 身份验证手机号验证没86

处理方案 在浏览器中摁 【F12】打开控制台&#xff0c;选择网络模块&#xff0c;找到手机号列表的请求&#xff0c;请求是 https://gitlab.com/-/countries&#xff0c;右击数据区域点击【替换内容】如下&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.cn/di…

【信息学奥赛】CSP-J/S初赛03 计算机网络与编程语言分类

第1节 计算机网络基础 1.1 网络的定义 所谓计算机网络&#xff0c;就是利用通信线路和设备&#xff0c;把分布在不同地理位置上的多台计算机连 接起来。计算机网络是现代通信技术与计算机技术相结合的产物。 网络中计算机与计算机之间的通信依靠协议进行。协议是计算机收、发…

Linux文件与内容查阅、归档压缩

#Linux系统基础 文件与内容查找、归档压缩 find命令搜索文件 grep对文件的内容进行搜索 tar命令进行文件的压缩与解压缩 一、文件的查找 格式实例&#xff1a;find . -name "123.txt"说明find起始目录查找类型查找条件./ 或 .-name“123.txt”在当前目录中查找…

CIC-DDoS2019-Detection

CIC-DDoS2019 对CIC-DDoS2019数据集进行检测,本文提供了如下内容&#xff1a; 数据清洗与合并机器学习模型深度学习模型PCA,t-SNE分析数据&#xff0c;结果可视化 代码地址&#xff1a;[daetz-coder](https://github.com/daetz-coder/CIC-DDoS2019-Detection) 1、数据集加载…

echart在线图表demo下载直接运行

echart 全面的数据可视化图表解决方案 | 折线图、柱状图、饼图、散点图、水球图等各类图表展示 持续更新中 三色带下表题速度仪表盘 地图自定义图标 动态环形图饼状图 动态水波动圆形 多标题指针仪表盘 温度仪表盘带下标题 横向柱状图排名 环形饼状图 双折线趋势变化

排序——快速排序

目录 思想 演示 代码实现 解释 优化 三数取中 小区间优化 补充 挖坑法 双指针法 非递归实现 思想 快速排序是一种二叉树结构的交换排序方法。 基本思想为&#xff1a;任取待排序元素序列中的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&am…

​【数据结构与算法】冒泡排序:简单易懂的排序算法解析

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​ 目录 一、引言 二、冒泡排序原理 &#x1f343;基本思想&#xff1a; &#x1f343;算法…

课程笔记 | 数字设计基础

1.数字ASIC设计流程 2.组合与时序电路 3.同步与异步复位 4.锁存器Latch 5. RTL VS Gate 6.建立与保持时间 7.流水线设计 8.时钟树综合 9.Cell延时 10.PVT特性 11.Wire延时 1.根据ASIC流程的介绍&#xff0c;理解静态和动态验证的区别。请指出以下验证对应ASIC流程中的…

优化:服务队列堵塞,内存不足,CPU打满导致宕机,服务卡死

一.事件&#xff1a;刚接手的项目因消息队列堵塞频繁报警&#xff0c;交接的时候原负责人说项目是最近出现的问题&#xff0c;暂时无法解决&#xff0c;只能靠重启解决&#xff1b; 二.排查&#xff1a;因公司用的是jre&#xff0c;也没有其他第三方工具&#xff0c;只能按照经…