leetcode中等236二叉树的最近公共祖先

Posted qq_40707462

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode中等236二叉树的最近公共祖先相关的知识,希望对你有一定的参考价值。

在这里插入图片描述
思路:递归dfs
若 root是 p, q的 最近公共祖先 ,则:

  1. p和 q在 root的子树中,且分列 root的 异侧(即分别在左、右子树中);
  2. p = root或q=root;

返回情况

  1. 当 left和 right 同时为空 :说明 root 的左 / 右子树中都不包含 p,q,返回 null
  2. 当 left和 right同时不为空 :说明 p, q分列在 root的 异侧 ,因此root 为最近公共祖先,返回 root ;
  3. 当 left为空 ,right不为空 :p,q都不在 left里,直接返回 right 。right为空同理
# 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:#左右都不为空,返回root
            return root
        elif left:
            return left
        elif right:
            return right
        return None

以上是关于leetcode中等236二叉树的最近公共祖先的主要内容,如果未能解决你的问题,请参考以下文章

236. 二叉树的最近公共祖先[中等]

236. 二叉树的最近公共祖先-中序遍历-中等难度

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

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

leetcode 236 二叉树的最近公共祖先

leetcode-236二叉树的最近公共祖先