流程分析
- 根节点等于p或q,那么root是最近公共祖先
- 向左子树寻找p 和 q 只要找到了一个 就说明左子树找到了存在一个
- 向右子树寻找p 和 q 只要找到了一个 就说明右子树至少存在一个
- 若左右各找到一个,那么当前根节点就是最近公共祖先
- 只有左边找到,那么最近公共祖先在左边
- 只有右边找到,那么最近公共祖先在右边
代码实现
const lowestCommonAncestor = (root, p, q) => {
if (!root) return null;
if (root === p || root === q) return root;
const left = lowestCommonAncestor(root.left, p, q);
const right = lowestCommonAncestor(root.right, p, q);
if (left && right) return root;
if (left) return left;
if (right) return right;
};