news 2026/4/18 10:31:39

二叉树的最近公共祖先-python-递归

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二叉树的最近公共祖先-python-递归

题目:

思路:

  1. 递归遍历:从根节点出发,递归遍历左、右子树,目标是找到pq
  2. 回溯 “判断”—— 确定 LCA:递归遍历完左右子树后,会得到两个结果(left:左子树找到的节点;right:右子树找到的节点),通过这两个结果判断当前节点的角色
左右子树结果含义(p/q的位置)当前节点的角色返回值
left=None + right=None既不在左子树,也不在右子树无目标,无贡献None
left=None + right≠None都在右子树(右子树已找到目标 / LCA)传递右子树的结果right
left≠None + right=None都在左子树(左子树已找到目标 / LCA)传递左子树的结果left
left≠None + right≠None分别在左、右子树(跨子树)自身就是最近公共祖先当前节点root
3.最终回溯 —— 定位最深 LCA

递归会从叶子节点向上回溯,每一层都按上述规则判断:

  • p/q都在某一子树中,结果会持续向上传递该子树的 LCA;
  • p/q分属左右子树,当前节点就是 “最深” 的公共祖先(因为再往下的子树只能找到其中一个目标)。

代码:

# 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': //只要当前根节点是p和q中的任意一个,就返回(因为不能比这个更深了,再深p和q中的一个就没了) if not root or root == p or root == q: return root //根节点不是p和q中的任意一个,那么就继续分别往左子树和右子树找p和q left = self.lowestCommonAncestor(root.left,p,q) right = self.lowestCommonAncestor(root.right,p,q) //p和q都没找到,那就没有 if not left and not right: return None //左子树没有p也没有q,就返回右子树的结果 if not left: return right //右子树没有p也没有q就返回左子树的结果 if not right: return left //左右子树都找到p和q了,那就说明p和q分别在左右两个子树上,所以此时的最近公共祖先就是root return root
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 1:09:48

acer电脑也可以用下面命令调查电池报告——宏基笔记本用的三洋电池-recent usage显示最近的使用情况-Usage history显示一段时间的-但是不是所有的日期,估计有些丢失了-估计因为重

acer电脑也可以用下面命令调查电池报告——宏基笔记本用的三洋电池-recent usage显示最近的使用情况-Usage history显示一段时间的-但是不是所有的日期,估计有些丢失了-估计因为重装系统有关。-重装破解系统没有序列号 powercfg/batteryreport Battery report COMPUTER NAME …

作者头像 李华
网站建设 2026/4/18 10:08:09

Gemini 3.0 Pro 的幻觉:gemini cli 可以“/context add“添加上下文

对比下来,还是Chatgpt 更了解 gemini cli 的使用。 Gemini 告知可以通过 /context add 实现上下文超长背景信息的使用,我信以为真,还煞有介事列举了优缺点和对比。结果Chatgpt对此予以否认:国内AI应该学习antigravity, gemini cli…

作者头像 李华
网站建设 2026/4/18 6:18:43

1、构建基于 VXLAN BGP EVPN 的数据中心:全面解析与实践指南

构建基于 VXLAN BGP EVPN 的数据中心:全面解析与实践指南 1. EPUB 电子书阅读指南 EPUB 是一种开放的行业标准电子书格式,但不同阅读设备和应用程序对其支持和功能表现有所差异。你可以通过设备或应用的设置来自定义阅读展示效果,常见的可定…

作者头像 李华
网站建设 2026/4/18 6:36:53

前端接受后端文件流并下载的几种方法,收藏这篇就够了

项目中经常会遇到需要导出列表内容,或者下载文件之类的需求。结合各种情况,我总结了前端最常用的三种方法来接受后端传过来的文件流并下载,针对不同的情况可以使用不同的方法。 首先是后端将文件转换成byte数组 /*** 将文件转换成byte数组*…

作者头像 李华