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

372 阅读1分钟

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

题目描述

image.png

解题思路

  • 首先判断当前节点是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;
    }
};

题目反思

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