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

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

这是第二次刷这个题目了,可见这个题目的考频有多高。这是一刷的地址剑指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;
    }
};
复制代码

题目反思

  • 学会使用递归的方式遍历二叉树并返回目标元素。
相关文章
|
存储 算法 C语言
【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅱ
这里有两种方法(深度优先搜索与广度优先搜索)其实也就是前序遍历与层序遍历,层序遍历这里简单提一下.与上面的大同小异就不过多赘述了:依旧是遍历出每一层最大的值,将其放入数组即可.
79 0
|
10月前
|
算法 DataX
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
|
算法 前端开发 程序员
「LeetCode」236-二叉树的最近公共祖先⚡️
「LeetCode」236-二叉树的最近公共祖先⚡️
139 0
「LeetCode」236-二叉树的最近公共祖先⚡️
|
C++
【力扣·每日一题】429. N 叉树的层序遍历(C++ bfs)
【力扣·每日一题】429. N 叉树的层序遍历(C++ bfs)
128 0
|
算法 C语言 C++
【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅲ
这题算是简单题,我们依然从最简单的情况来考虑。
96 0
【创作赢红包】< 二叉树OJ题(一) >单值二叉树&&二叉树的最大深度&&翻转二叉树&&相同的树&&对称二叉树
【创作赢红包】< 二叉树OJ题(一) >单值二叉树&&二叉树的最大深度&&翻转二叉树&&相同的树&&对称二叉树
|
算法 Java 开发者
树的“最近公共祖先”问题,面试不再怕了!
本文所列题目来自 LeetCode 中国网站,属于算法面试中关于二叉树的经典高频考题(求二叉树的最近公共祖先)。题解由 Doocs 开源社区 leetcode 项目维护者提供。
164 0
树的“最近公共祖先”问题,面试不再怕了!
|
存储 算法
【每日挠头算法题(9)】二叉树的直径|二叉树的层序遍历
【每日挠头算法题(9)】二叉树的直径|二叉树的层序遍历
|
10月前
[leedcode]刷题有感 二叉树的深度、节点数量、与平衡二叉树2
[leedcode]刷题有感 二叉树的深度、节点数量、与平衡二叉树2
|
10月前
[leedcode]刷题有感 二叉树的深度、节点数量、与平衡二叉树1
[leedcode]刷题有感 二叉树的深度、节点数量、与平衡二叉树