这是第二次刷这个题目了,可见这个题目的考频有多高。这是一刷的地址​​剑指Offer——二叉树的最近公共祖先(JS实现)​​。


题目描述

二刷--二叉树的最近公共祖先_最近公共祖先

解题思路


  • 首先判断当前节点是null还是p还是q。

  • null:直接返回null
  • p:直接返回p
  • q:直接返回q

  • 递归遍历左右子树并接受返回值
  • 如果左右子树返回的值都不为空,则说明当前的父节点就是最近公共祖先。反之则返回当前不为空的节点为最近公共祖先。

AC代码

var lowestCommonAncestor = function(root, p, q) {
// 如果节点为空 返回null
if (!root ) return null;

if (root === p) return p;

if (root === q) return q;

let x = lowestCommonAncestor(root.left,p,q);
let y = lowestCommonAncestor(root.right,p,q);

if (x && y) {
return root;
} else {
return x || y;
}
};

题目反思

  • 学会使用递归的方式遍历二叉树并返回目标元素。