代码随想录_二叉树_leetcode236

news2024/12/27 3:48:06

leetcode 236. 二叉树的最近公共祖先

236. 二叉树的最近公共祖先

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

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

示例 1:

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出:3
解释:节点 5 和节点 1 的最近公共祖先是节点3 。

示例 2:

 

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
输出:5
解释:节点 5 和节点 4 的最近公共祖先是节点 5 。因为根据定义最近公共祖先节点可以为节点本身。

示例 3:

输入:root = [1,2], p = 1, q = 2
输出:1

 代码

//leetcode 236. 二叉树的最近公共祖先
// 回溯
class Solution {
public:
	TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
		if (root == nullptr || root == p || root == q)
		{
			return root;
		}
		TreeNode* left = lowestCommonAncestor(root->left, p, q);
		TreeNode* right = lowestCommonAncestor(root->right, p, q);
		if (left != nullptr && right != nullptr)
		{
			return root;
		}
		return left ? left : right;
	}
};

leetcode 235. 二叉搜索树的最近公共祖先

235. 二叉搜索树的最近公共祖先

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

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

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

示例 1:

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
输出: 6 
解释: 节点 2 和节点 8 的最近公共祖先是 6。

示例 2:

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4
输出: 2
解释: 节点 2和节点 4的最近公共祖先是 2, 因为根据定义最近公共祖先节点可以为节点本身。

 

 代码

// leetcode 235. 二叉搜索树的最近公共祖先
// 层序遍历第一个在pq之间的结点
class Solution {
public:
	TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
		int a = min(p->val, q->val);
		int b = max(p->val, q->val);

		queue<TreeNode*> que;
		que.push(root);

		while (!que.empty())
		{
			TreeNode* cur = que.front();
			que.pop();
			if (cur->val >= a && cur->val <= b)
				return cur;

			if (cur->left)
				que.push(cur->left);
			if (cur->right)
				que.push(cur->right);
		}
		return NULL;
	}
};

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

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

相关文章

Windows主机信息搜集

注意&#xff1a;一切内容仅用于信息技术分享&#xff0c;切勿用于其他用途&#xff0c;一切后果与作者无关。 前言&#xff1a; 通过命令执行使用cs拿到了内网的一台主机&#xff0c;接下来我们进行内网的信息搜集。 1、内网环境分析 内网渗透&#xff1a; 在拿到webshell的…

机器学习——最大最小归一化

问&#xff1a;写出最小最大归一化公式,并对以下数据集进行最小最大归一化。x{6.3,9.2,-0.8,0.2,3.6}答&#xff1a; x_{min}-0.8 x_{max}9.2 将每个数据点应用最小最大归一化公式&#xff1a; $x_1{6.3-(-0.8)}/{9.2-(-0.8)}0.71 $x_2{9.2-(-0.8)}/{9.2-(-0.8)}1.0 $x_3…

PasteSpider之部署实际案例一则

本帖主要是介绍使用PasteSpider部署一个项目的过程&#xff0c;不一定会把所有问题都概括在内&#xff0c;但是至少是一个项目部署的完整流程和说明&#xff01; 我们以PasteCode的网站作为一个项目为例子&#xff0c;绑定的域名为https://www.pastecode.cn/,项目包含了api端和…

ldap 组织结构如何转成多叉树?

工作中&#xff0c;ldap 服务器的对接&#xff0c;可以能会涉及到同步组织结构&#xff0c;认证&#xff0c;认证后处理等等&#xff0c;最近认证还不是我想写的刚需&#xff0c;继续来看看对于组织结构的想法 例如同步 AD 域的组织结构&#xff0c;或者是 ldap 协议的其他产品…

「计算机控制系统」2. 采样与数据保持

计算机控制系统中的信号 理想采样过程的数学描述 信号的恢复与重构 文章目录计算机控制系统中的信号基础知识A/D中的信号D/A中的信号理想采样过程的数学描述采样过程的描述理想采样信号的描述Shannon采样定理信号的恢复与重构Shannon重构法信号保持重构法计算机控制系统中的信号…

Java属性文件编码:处理非西欧语言字符的指南

Java属性文件是一种轻量级的配置文件格式&#xff0c;用于在Java应用程序中存储键值对数据。在Java中&#xff0c;Properties类提供了一种方便的方式来读取和写入属性文件。 在Java中&#xff0c;属性文件通常使用ISO-8859-1字符集编码。这意味着如果您希望在属性文件中使用非…

中科图新BIM+GIS数字化设计施工管理解决方案

一、引言&#xff1a; 公路项目对施工质量和风险控制要求高&#xff0c;但涉及专业、队伍、机械等众多因素&#xff0c;导致施工质量与安全控制困难。必须提前应对并做好过程中的管控&#xff0c;信息化系统可支持记录和管理数据。 二、中科图新BIMGIS智慧施工管理平台 中科图…

docker容器的相关环境及创建镜像1

一、容器管理工具介绍 LXC 2008 是第一套完整的容器管理解决方案 不需要任何补丁直接运行在linux内核之上管理容器。创建容器慢&#xff0c;不方便移植 Docker 是在LXC基础上发展起来的。拥有一套容器管理生态系统 生态系统包含︰容器镜像、注册表、RESTFUL API及命令行操作界…

Python算法设计 - McCarthy 91

目录一、什么是 McCarthy 91二、有什么用&#xff1f;三、Python算法实现四、作者Info一、什么是 McCarthy 91 McCarthy 91 是一个递归的函数表达式如下 函数的意思是当输入一个大于 100 的数字 n 时返回 n-10&#xff0c;而当输入一个小于等于101的数字 n 时递归的对 n 进行…

QT之widget窗口标题与项目构建目标位置修改

文章目录widget窗口标题修改方法一&#xff0c;直接通过UI界面修改方法二&#xff0c;通过代码修改结果展示&#xff0c;选择其中一种方法即可构建项目生成文件目标位置修改1. 首先选择——>项目&#xff0c;如图所示&#xff1a;2.打开后选择构建设置——>编辑构建位置&…

【VScode】手把手教你如何搭建C/C++开发环境

目录 1.VScode是什么 2.VScode的下载和安装 安装中文插件 3.VScode配置C/C开发环境 3.1 下载MinGW-w64 编译器套件 3.2 配置MinGW-w64 3.3 安装C/C插件 4.在VScode上编写C语言代码并编译成功 4.1打开文件夹 4.2 新建C语言文件&#xff0c;编写C语言代码 4.3设置C/…

vue3项目中使用pinia

vuex 4pinia 小菠萝 vuex和之前vue2使用一致 1.import { createStore } from vuex 引入文件不同vue3组件setup写法vuex提供了hook //组件中操作store import { useStore } from vuex //提交mutations 进行修改 store.commit(increment), //dispatch 触发action 同步或者异步提交…

【C】Process Control

系列连载 【python / C / C】 参考 《C语言程序设计&#xff08;第四版&#xff09;谭浩强》【C语言】C语言视频教程《郝斌 C 语言自学教程》 文章目录1 什么是流程控制2 流程控制的分类2.1 顺序执行2.2 选择执行2.3 循环执行2.3.1 for2.3.2 while2.3.3 do...while2.3.4 swi…

[ 汇编语言 (一) ] —— 踩着硬件的鼓点,掌握计算机的精髓

&#x1f64c;秋名山码民的主页 &#x1f602;一个打过一年半的oier&#xff0c;写过一年多的Java&#xff0c;现在致力于学习iot应用的普通本科生 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f64f;作者水平有限&#xff0c;如发现…

数据库系统工程师——第二章 程序语言基础知识

文章目录&#x1f4c2; 第二章、程序语言基础知识 &#x1f4c1; 2.1 程序语言概述 &#x1f4d6; 2.1.1 程序语言的基本概念 &#x1f4d6; 2.1.2 程序语言的基本成分 &#x1f4c1; 2.2 程序语言翻译基础 &#x1f4d6; 2.2.1 汇编程序基本原理 &#x1f4d6; 2.2.2 编译程序…

算法之归并排序

文章目录一、归并排序&#xff08;递归版&#xff09;二、归并排序&#xff08;非递归版&#xff09;一、归并排序&#xff08;递归版&#xff09; 归并排序思想&#xff1a;将数组划分为两个区间&#xff0c;左区间&#xff0c;右区间 然后对这两个区间内容进行排序 &#xff…

一文讲懂C#、ASP.NET、ASP.NET MVC、ASP.NET web form、asp.net core mvc的区别

微软的命名很糟糕。技术上有两个框架&#xff1a;ASP.NET和ASP.NET Core&#xff0c;它们分别基于.NET Framework和.NET Core构建。 当Microsoft首次尝试创建一个遵循MVC模式的“现代”Web应用程序平台时&#xff0c;它将这个新平台称为“ASP.NET MVC”&#xff0c;以区别于以前…

【性能优化】cocoscreator 共享节点-动效复用方案

前言 迷雾散尽&#xff0c;露出了古朴庄严的森林。古老的铁杉&#xff0c;在头顶编成绿色穹顶。 阳光在树叶间破碎成金色顶棚。从树干间远眺&#xff0c;远处的森林渐渐隐去。 用几句话就能描述一片巨大的森林&#xff0c;但是在实时游戏中做这件事就完全是另外一件事了。 当屏…

[数据结构-C语言] 算法的时间复杂度

目录 1.算法的复杂度 2.时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 3、常见时间复杂度计算举例 3.1 冒泡排序 3.2 二分查找 3.3 阶乘递归 3.4 斐波那契数列 1.算法的复杂度 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源 …

PS学习记录——自动选择的【图层】/【组】模式说明

PS中&#xff0c;【移动工具】状态下&#xff0c;上方的工具栏有个【自动选择功能】&#xff0c;用于移动图像 自动选择下有【图层】、【组】两种选项 1、自动选择-【图层】 图层模式下&#xff0c;自动选择可以任意移动选中的图像图层&#xff0c;想移动哪个就移动哪个 即便不…