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


    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
    • p 和 q 均存在于给定的二叉树中。

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/summary-ranges
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    1. dfs

    时间
    52ms
    击败 68.44%使用 Python 的用户
    内存
    24.04MB
    击败 62.53%使用 Python 的用户

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution(object):
        def lowestCommonAncestor(self, root, p, q):
            """
            :type root: TreeNode
            :type p: TreeNode
            :type q: TreeNode
            :rtype: TreeNode
            """
            # 如果节点不存在或者节点是两个指定节点之一, 返回节点
            if not root or root == p or root ==q:
                return root
            # 左递归
            left = self.lowestCommonAncestor(root.left,p,q)
            # 右递归
            right = self.lowestCommonAncestor(root.right,p,q)
            # 如果左右都不为空, 说明指定节点存在于当前节点下
            if left and right:
                return root
            # 其他情况,只存在于当前节点的左子树或者右子树
            return left if left else right
            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    php7 改为从栈上分配内在的思路
    JavaEE:文件IO
    SpringBoot学习笔记-创建个人中心页面(上)
    PRBP20P-10/250C-EB、PRDP6G-10/30-CB电液比例直动式先导减压阀放大板
    18_ue4进阶末日生存游戏开发[创建运行时UI]
    垃圾回收-《JavaScript 高级程序设计》阅读笔记
    前端 video 实现全屏播放
    2022安洵杯babyphp
    每日三题 11.03
    Windows安装MySQL8.0详细步骤
  • 原文地址:https://blog.csdn.net/Ashiu/article/details/132790316