[leetcode] 236. Lowest Common Ancestor of a Binary Tree @ python

原题

https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/

解法

参考: LeetCode 236 Lowest Common Ancestor of a Binary Tree 【公瑾讲解】
使用递归, base case是返回root或None.然后使用分治法, 如果左右节点的lowestCommonAncestor都不为空, 则结果是root, 如果左边节点的lowestCommonAncestor是None, 则结果是右边节点的lowestCommonAncestor, 反之亦然.

Time: 2*O(h), h为树的高度
Space: O(1)

代码

# 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
        """
        # base case
        if not root:
            return None
        if root == p or root == q:
            return root
        # divide and conquer
        left = self.lowestCommonAncestor(root.left, p, q)
        right = self.lowestCommonAncestor(root.right, p, q)
        
        if left and right:
            return root
        if not left:
            return right
        if not right:
            return left

你可能感兴趣的:(Leetcode)