Python实现寻找二叉树中最近的公共祖先

97 篇文章 ¥59.90 ¥99.00
本文介绍如何在无法访问父节点信息的二叉树中,通过递归遍历的方式寻找两个节点的最低公共祖先。首先定义检查节点存在的函数,然后从根节点开始,根据节点在左右子树中的位置判断最近公共祖先。Python代码实现详细阐述了这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python实现寻找二叉树中最近的公共祖先

在二叉树中,我们可以定义节点的父节点为其直接连接上层节点的边,无法访问父节点信息的情况下如何获取两个节点的最低公共祖先呢?我们可以采用递归遍历二叉树的方式进行查找。

首先,我们需要定义一个函数来检查某个节点是否在二叉树中,如果在返回该节点,否则返回空。接着,使用递归的方法,从根节点开始遍历二叉树。具体步骤如下:

  1. 当前节点为 None 或者等于 p 或者 q 则直接返回当前节点;
  2. 在左子树中查找 p 和 q,如果都存在则返回 left;
  3. 在右子树中查找 p 和 q,如果都存在则返回 right;
  4. 如果左子树中未找到p和q,则说明p和q都在右子树中,返回 right;
  5. 如果右子树中未找到p和q,则说明p和q都在左子树中,返回 left;
  6. 最后,如果p和q分别在根节点两侧,则最近的公共祖先即为root。

下面是对应的Python代码实现:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val  
        self.left = left
        self.right = right
 
def lowestCommonAncestor(root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
    if not root or root == p or root == q:
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值