思路
递归寻找p或q节点
1、确定递归函数的返回值和参数
因为要遍历所有的节点,寻找是否有p节点或q节点,因此一旦找到就返回节点,找不到就返回空
2、确定终止条件
1)当前节点为空,当然没法继续遍历
2)当前节点就为p或q节点,直接可以返回
3、当前要做什么
1)左子树或右子树返回值都不为空,说明左右子树找到了p、q节点,直接返回当前root节点
2)左子树返回值空,右子树不为空,则返回右子树,反之亦然
代码
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
if not root or p == root or q == root:
return root
left = self.lowestCommonAncestor(root.left, p, q)
right = self.lowestCommonAncestor(root.right, p, q)
if left and right:
return root
if left:
return left
if right:
return right