【Leetcode 每日一题】235. 二叉搜索树的最近公共祖先

embedded/2024/11/29 11:02:46/

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, 因为根据定义最近公共祖先节点可以为节点本身。

说明:

  • 所有节点的值都是唯一的。
  • p、q 为不同节点且均存在于给定的二叉搜索树中。

思路:

要找到最近的公共父节点,因为给的已经是二叉树了,也就是父节点的左子树中的节点值均比父节点的值小,右子树中节点的值均比父节点打,所以我们要找到的就是p和q分别在哪一个节点之后分布在了父节点两侧,从上往下遍历即可,当在一侧的时候就进行继续向下遍历。这也考虑到了一个节点也可以是它自己的祖先这个问题,因为移动到一个节点作为祖先的时候显然不满足均小于这个祖先节点的值,跳出循环结束。

代码:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {TreeNode* ancester = root;while(true){if(p->val < ancester->val && q->val < ancester->val){ancester = ancester->left;}else if(p->val > ancester->val && q->val > ancester->val){ancester = ancester->right;}else{break;}}return ancester;}
};


http://www.ppmy.cn/embedded/141442.html

相关文章

如何在Solana链上开发Dapp?RPC节点的要求

在 Solana 链上开发 DApp 是一个系统性过程 1. 理解 Solana 和其开发模型 Solana 是高性能区块链&#xff0c;采用 Rust 语言开发智能合约&#xff08;称为 Program&#xff09;。开发 DApp 需要掌握以下核心概念&#xff1a; • 账户模型&#xff1a;Solana 使用账户存储数…

Ubuntu 服务器部署 Tomcat 并配置 SSL/TLS 证书

本文目录 准备登陆云服务器安装 Java下载 tomcat 包配置防火墙浏览器访问 Tomcat 默认页面以服务的形式运行 Tomcat创建 Tomcat 用户和组创建 systemd 服务文件启动 tomcat 服务 Tomcat webapps 文件目录部署一个静态网站tomcat 的配置文件 将域名解析到服务器Tomcat 配置 SSL/…

【docker】细致且具有时效性的docker在ubuntu的安装,新鲜出炉

1.APT 镜像源配置 (Ubuntu 软件包源) Ubuntu 默认使用的是 http://cn.archive.ubuntu.com/ubuntu 作为软件包源&#xff0c;这个源位于国外&#xff0c;访问速度可能较慢。通过修改 APT 配置文件&#xff0c;可以指定国内的镜像源 修改方式&#xff1a; 手动修改镜像源&…

JWT介绍和结合springboot项目实践(登录、注销授权认证管理)

目录 一、JWT介绍&#xff08;一&#xff09;基本介绍&#xff08;二&#xff09;jwt有哪些库1、jjwt&#xff08;Java JWT&#xff09;2、nimbus - jwt - jwt - api 和 nimbus - jwt - jwt - impl3、spring - security - jwt&#xff08;已弃用&#xff0c;但在旧项目中有参考…

【C++】7000字介绍map容器和set容器的功能和使用

目录 一、关联式容器和序列式容器 二、键值对,> 三、树形结构的关联式容器 四、set容器&#xff08;key模型&#xff09; 1、文档官网 2、功能介绍&#xff1a; 3、注意事项&#xff1a; 4、基本使用&#xff0c;更多接口可查看官网&#xff1a; &#xff08;1&…

外卖点餐系统小程序

目录 开发前准备 项目展示项目分析项目初始化封装网络请求 任务1 商家首页 任务分析焦点图切换中间区域单击跳转到菜单列表底部商品展示 任务2 菜单列表 任务分析折扣信息区设计菜单列表布局请求数据实现菜单栏联动单品列表功能 任务3 购物车 任务分析设计底部购物车区域添加商…

SAP 仓库地址配置以及取值 表 TWLAD

首先&#xff0c;维护仓库路径 SPRO->企业结构->定义->物料管理->维护仓储地点 选中仓位&#xff0c;点击 库存地点的地址 这里是我维护的序列号为1的&#xff0c;这个仓库的地址&#xff0c;点击明细查看 地址信息就在这里面 接下来说明&#xff0c;怎么通过A…

ansible变量

一.ansible变量一.ansible变量1.Ansible中的facts变量2.Ansible中的自定义变量1.Ansible中的facts变量(1)Facts变量是什么:facts变量可以理解为Ansible中的预定义变量(自带变量{{ ansible_hostname }}等)用于采集的被控节点的设备信息主要包含IP地址、操作系统、以太网设备、ma…