递归算法由基线条件(也即是最基本的原子问题),和递归子问题构成。而基线条件保证了从上到下递归过程的结束。
每步递归子问题递归到基线时,都会有返回值,返回值由下至上层层返回至当时递归的那一步。
本题递归返回值
本题中,基线问题返回None,或者返回root.
左子树或右子树递归时,返回的也将会是None,或是root。其中root,可以是p或q。
如果p在左子树,根的左子树返回p,如果p不在左子树,根的左子树返回None,q和右子树同理。
而函数总的返回值将会是对根的左子树和右子树的判断,该判断依据也与基线问题中的判断条件一致。
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode'