剑指 Offer 68 - II. 二叉树的最近公共祖先

95 阅读1分钟

剑指 Offer 68 - II. 二叉树的最近公共祖先

流程分析

  1. 根节点等于p或q,那么root是最近公共祖先
  2. 向左子树寻找p 和 q 只要找到了一个 就说明左子树找到了存在一个
  3. 向右子树寻找p 和 q 只要找到了一个 就说明右子树至少存在一个
  4. 若左右各找到一个,那么当前根节点就是最近公共祖先
  5. 只有左边找到,那么最近公共祖先在左边
  6. 只有右边找到,那么最近公共祖先在右边

代码实现

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;
};