版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_36372879/article/details/88243536
算法思路
按照从下面到下面遍历的方法
如果遍历到p或者q,说明一个在另外一个下面,如实例2:那么直接返回p或者q
然后往左边和右边遍历
如果左边和右边都不为空,说明一个在左边一个在右边,那么返回root
如果其中一个为空,那么返回另外一边。
代码
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
if root == None:
return None
if root == p or root == q:
return root
left = self.lowestCommonAncestor(root.left, p, q)
right = self.lowestCommonAncestor(root.right, p, q)
if left != None and right != None:
return root
if left == None:
return right
if right == None:
return left