二叉树的最近公共祖先
题目描述:
解题思路:
- 第一种:分治递归。这道题解题的关键就是通过遍历找出这两个结点,然后找到这个公共祖先
root
。这里我们的思路就是分别判断这个结点的左右子树,如果在左右子树都找到了p
和q
则这个结点就是最近的公共祖先了。 - 时间复杂度: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