思想:递归,时间/空间复杂度O(n)。
1. 根为p或者q,返回根;
2. 在左子树和右子树分别找p或者q,如果
2.1 两边都找到,则返回根;
2.2 左子树找到,则返回左子树找到的lca;
2.2 右子树找到,则返回右子树找到的lca
def lca(rt, p, q):
if (not rt) or (rt == p) or (rt == q): return rt
left, right = lca(rt.left, p, q), lca(rt.right, p, q)
return rt if left and right else left or right