news 2026/4/23 11:45:12

LeetCode(python)——236.二叉树的最近公共祖先

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode(python)——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

提示:

  • 树中节点数目在范围[2, 105]内。
  • -109 <= Node.val <= 109
  • 所有Node.val互不相同
  • p != q
  • pq均存在于给定的二叉树中。

思路

规律:p、q节点要么在分叉点(最近公共祖先就是分叉交点),要么在同一边(最近公共祖先是两者中的一个)

利用后序遍历去找左右子树,如果找到p、q则返回,如果为空(没找到p、q)返回None

用left去记录遍历左子树的结果

用right去记录遍历右子树的结果

有4种情况:
(1)left、right == null,说明都没有找到,p、q节点不在当前访问的节点的左右子树上,return None

(2)left为空,right不为空,说明p、q在右子树中,那么right就是最近公共祖先,return right(left不为空,right为空同理)

(3)left、right都不为空:说明p、q在当前访问的节点的左右子树上,当前节点就是最近公共祖先,return node

代码

# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode': return self.f(root, p ,q) # 递归函数:利用后序遍历在左右子树中找p、q def f(self, node: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode': if node == None or node == p or node == q: # 如果当前节点是p、q直接返回 return node left = self.f(node.left, p, q) # 往左子树找 right = self.f(node.right, p, q) # 往右子树找 if left == None and right == None: return None # 如果都为空,说明不在当前节点下 if left and right: return node # 如果都不为空,说明分别位于当前节点的左右子树,那么当前节点就是LCA return left if left else right # 如果其中一个为空,一个不为空,说明p、q在同一边,那么不为空的left/right就是LCA
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 6:33:22

震惊!这家酶制剂生产商竟靠这3点征服市场

震惊&#xff01;这家酶制剂生产商竟靠这3点征服市场在竞争日趋白热化的生物技术领域&#xff0c;特别是酶制剂这一细分市场&#xff0c;企业若想脱颖而出&#xff0c;不仅需要过硬的技术&#xff0c;更需要一套独特的市场战略。近年来&#xff0c;一家名为上海华上翔洋生物技术…

作者头像 李华
网站建设 2026/4/19 10:30:36

震惊!这家酶制剂技术竟让行业炸锅

震惊&#xff01;这家酶制剂技术竟让行业炸锅在生物制造与绿色工业的浪潮中&#xff0c;一项核心技术的突破往往能引发产业链的深度变革。近期&#xff0c;一家名为华上翔洋生物的企业&#xff0c;凭借其前沿的酶制剂技术&#xff0c;在业内引发了广泛关注与热烈讨论。其创新成…

作者头像 李华
网站建设 2026/4/20 22:41:45

YashanDB数据库的事务处理性能优化策略

YashanDB 是一个专注于高性能和高可用性的数据库系统&#xff0c;优化其事务处理性能&#xff0c;可以采取以下策略&#xff1a;1. 合理设计数据模型&#xff1a;- 确保数据模型符合规范化原则&#xff0c;减少冗余数据&#xff0c;降低数据一致性维护的复杂性。- 采用适当的分…

作者头像 李华
网站建设 2026/4/22 4:53:08

云原生时代软件测试策略的转型与创新

云计算重塑测试范式 随着企业数字化转型加速&#xff0c;云计算已成为软件部署和运行的主流环境。根据Gartner最新预测&#xff0c;到2026年&#xff0c;超过85%的企业将采用云优先原则&#xff0c;而云原生架构正成为数字化创新的核心引擎。这种环境变迁深刻重构了软件测试的…

作者头像 李华
网站建设 2026/4/23 6:58:01

YashanDB数据库的事务隔离级别与并发控制详解

优化数据库的事务隔离级别与并发控制是保障数据一致性和系统性能的关键技术。事务隔离级别直接影响并发执行事务之间的数据可见性&#xff0c;有效的并发控制机制则确保多事务并发时的安全操作。YashanDB作为支持多种部署形态的高性能数据库&#xff0c;其事务隔离与并发控制设…

作者头像 李华
网站建设 2026/4/18 7:17:14

zip函数详解

zip()是 Python 中一个非常实用的内置函数&#xff0c;用于将多个可迭代对象&#xff08;如列表、元组、字符串等&#xff09;的元素配对组合。1. 基本用法将两个列表配对names ["Alice", "Bob", "Charlie"] scores [85, 90, 95]# 使用 zip 配…

作者头像 李华