LeetCode 算法题库【236】——二叉树的最近公共祖先

二叉树的最近公共祖先

题目描述:

LeetCode 算法题库【236】——二叉树的最近公共祖先_第1张图片
LeetCode 算法题库【236】——二叉树的最近公共祖先_第2张图片

解题思路:
  • 第一种:分治递归。这道题解题的关键就是通过遍历找出这两个结点,然后找到这个公共祖先root。这里我们的思路就是分别判断这个结点的左右子树,如果在左右子树都找到了pq则这个结点就是最近的公共祖先了。
  • 时间复杂度:O(N)
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':
        if not root or root == p or root == q:
            return root
        left_root = self.lowestCommonAncestor(root.left, p, q)
        right_root = self.lowestCommonAncestor(root.right, p, q)
        if not left_root:
            return right_root
        elif not right_root:
            return left_root
        else:
            return root

LeetCode 算法题库【236】——二叉树的最近公共祖先_第3张图片

你可能感兴趣的:(LeetCode,算法学习)