当前位置: 首页 > news >正文

236. 二叉树的最近公共祖先 Python

文章目录

  • 一、题目描述
      • 示例 1
      • 示例 2
      • 示例 3
  • 二、代码
  • 三、解题思路


一、题目描述

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 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, 10^5] 内。
-10^9 <= Node.val <= 10^9
所有 Node.val 互不相同 。
p != q
p 和 q 均存在于给定的二叉树中。

二、代码

代码如下:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = Noneclass Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':p_father = []q_father = []def findp(r,path):if r.val == p.val:p_father.extend(path)p_father.append(r)returnif r.left != None:path.append(r)findp(r.left,path)path.pop()if r.right != None:path.append(r)findp(r.right,path)path.pop()def findq(r,path):if r.val == q.val:q_father.extend(path)q_father.append(r)returnif r.left != None:path.append(r)findq(r.left,path)path.pop()if r.right != None:path.append(r)findq(r.right,path)path.pop()findp(root,[])findq(root,[])presult = rootfor i in range(min(len(q_father),len(p_father))):if q_father[i] == p_father[i]:result = q_father[i]continueelse:breakreturn result

三、解题思路

本题在235. 二叉搜索树的最近公共祖先
的基础上将二叉搜索树改为二叉树,那么根据我们之前搜索p,q节点的所有父节点的思路来看,搜索方式有所不同,不能通过二叉搜索树的规律来快速找到对应p,q节点,但也可以通过一步一步试错的方式慢慢找到所有的父节点,解题思路同235. 二叉搜索树的最近公共祖先
一致,通过找出p,q节点所有的父节点列表,然后找出列表的最大公共子列表后,最后一个元素即为最近公共祖先。

http://www.lryc.cn/news/169991.html

相关文章:

  • WPF中DataGrid控件绑定数据源
  • Linux arm64 set_memory_ro/rw函数
  • 安达发|APS排单软件中甘特图的应用
  • 快速上手Linux基础开发工具
  • 【开发工具】idea 的全局搜索快捷键(Ctrl+shift+F)失效
  • 港联证券:“火箭蛋”来袭 蛋价涨势能否延续?
  • Vue3_vite
  • python-字符串去掉空格的常见方法
  • 如何写出一个成熟的线上线下结合的营销方案?
  • Vc - Qt - “扩张“的窗口
  • vue学习-02vue入门之组件
  • 解决Pycharm使用Conda激活环境失败的问题
  • SpringSecurity 核心组件
  • 【Vue】快速入门和生命周期
  • JVM架构和内存管理优化
  • C语言——贪吃蛇小游戏
  • PHP8中获取并删除数组中第一个元素-PHP8知识详解
  • EtherCAT 总线型 4 轴电机控制卡解决方案
  • Upload-labs十六和十七关
  • 软件包的管理
  • 常见入门级进销存系统合集
  • 爬虫逆向实战(32)-某号店登录(RSA、补环境、混淆)
  • 正则表达式学习和高级用法
  • C# Onnx Yolov8 Fire Detect 火焰识别,火灾检测
  • 线程安全问题
  • 【力扣每日一题】2023.9.18 打家劫舍Ⅲ
  • Docker基础学习
  • esbuild中文文档-路径解析配置项(Path resolution - Alias、Conditions)
  • 您的应用存在隐藏最近任务列表名称的行为,不符合华为应用市场审核标准
  • Spring的 webFlux 和 webMVC