news 2026/6/13 18:50:26

二叉树的最近公共祖先-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/6/12 19:53:10

汇编语言全接触-28.Win32调试API一

在本教程中,我们将学习Win32提供给开发者的用于调试的原语. 在教程的结尾,我们将学习如何调试一个进程. 下载 例子程序.理论:Win32有一些供程序员使用的API,它们提供相当于调试器的功能. 他们被称作Win32调试API(或原语).利用这些API,我们可以:加载一个程序或捆绑到一个正在运行…

作者头像 李华
网站建设 2026/6/12 20:00:51

nn.layernorm的认识

LayerNorm — PyTorch 2.9 documentation layernorm不是对通道进行归一化。而是对选定维度进行归一化。被选定的维度作为一个整体,计算出方差和均值然后进行对被选定维度进行归一化。 (整体归一化的意思就是,如果把[C, H, W]作为归一化维度…

作者头像 李华
网站建设 2026/6/9 6:56:51

计算机网络体系结构核心知识点整理

计算机网络体系结构核心知识点整理 一、互联网的基本组成 互联网本质是“边缘部分核心部分”的分层结构,两者协同实现全球数据传输: 边缘部分 定义:所有连接到互联网的终端设备(如个人电脑、手机、服务器),…

作者头像 李华
网站建设 2026/6/8 16:42:57

pythonstudy Day36

官方文档的阅读 疏锦行 import pandas as pd import numpy as npfrom sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifierfrom pdpbox import pdp import matplotlib.pyplot as plt import plotly.io as pio pio.renderers.default &qu…

作者头像 李华
网站建设 2026/6/12 19:41:56

(23)声明Bean的注解

负责声明Bean的注解,常见的包括四个: ComponentControllerServiceRepository 源码如下: package com.powernode.annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.…

作者头像 李华