还可以再优化,使用递归两步解决,第一步找出p的所有父节点,第二步从p的最后一个父节点开始依次找q
# Definition for a binary tree node.
# 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':
def commonAncestor(root, q, res):
if root is None:
return False
if root.val == q.val:
res.append(root)
return True
if root.left is not None:
if commonAncestor(root.left, p, res):
res.append(root)
return True
if root.right is not None:
if commonAncestor(root.right, p, res):
res.append(root)
return True
def commonAncestorSplit(root, q):
if root is None:
return False
if root.val == q.val:
return True
if root.left is not None:
if commonAncestorSplit(root.left, q):
return True
if root.right is not None:
if commonAncestorSplit(root.right, q):
return True
return False
res = []
commonAncestor(root, p, res)
for r in res:
if commonAncestorSplit(r, q):
return r