funclowestCommonAncestor(_root: TreeNode?, _p: TreeNode?, _q: TreeNode?) -> TreeNode? { // 只要当前根节点是p和q中的任意一个,就返回根节点 if root ===nil|| p === root || q === root { return root } // 根节点不是p和q中的任意一个,那么就继续分别往左子树和右子树找p和q let left = lowestCommonAncestor(root?.left, p, q) let right = lowestCommonAncestor(root?.right, p, q) // 左子树和右子树都没有找到,返回null if left ===nil&& right ===nil { returnnil } if left ===nil { // 左子树没有p也没有q,就返回右子树的结果 return right } if right ===nil { // 右子树没有p也没有q,就返回左子树的结果 return left } // 左右子树都找到p和q了,那就说明p和q分别在左右两个子树上,所以此时的最近公共祖先就是root return root }