题目描述
解法
首先思考该问题时候要确定什么时候该node是p和q的最近公共祖先(如果要求所有公共祖先的话,那么最近公共祖先的所有祖先都应该在这个列表中。)
-
p和q分别位于node的左子树和右子树上
-
p位于q的左子树或者右子树上(反之亦然)
这时,我们可以采用递归的方法:
class Solution:
def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:
if not root or root==p or root==q:
return root
left = self.lowestCommonAncestor(root.left,p,q)
right = self.lowestCommonAncestor(root.right,p,q)
if not left: return right #如果left为空,那么则返回right节点上的点,right会指向p或q或者两者的公共祖先
elif not right: return left #同上
elif not left and not right: return None #如果都为空,那么说明这棵树上没有这俩节点
else: return root #如果都不为空,说明该节点就是最近祖先
思考感想
🤔🤔🤔