def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:
if not root or root == p or root == q: return root # 找到p或q
left = self.lowestCommonAncestor(root.left, p, q) # pq谁先找到就返回谁
right = self.lowestCommonAncestor(root.right, p, q) #pq谁先找到就先返回谁
if not left: return right # 若pq都在右边,那么最先找到right的就是最近公共祖先
if not right: return left # 若pq都在左边,那么最先找到left的就是最近公共祖先
return root # 若pq在左右两边都有,那么root就是结果
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
# 或p,q在同一侧,p,q某一个先遍历到,root.val==p.val or root.val==q.val
if not root or root == p or root == q: return root
if root.val>p.val and root.val>q.val: # p,q在左子树中
return self.lowestCommonAncestor(root.left,p,q)
elif root.val<p.val and root.val<q.val: # p,q在右子树中
return self.lowestCommonAncestor(root.right,p,q)
else: # p,q在左右子树中,root为结果
return root