原题
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