当前位置:网站首页>LeetCode:236. 二叉树的最近公共祖先
LeetCode:236. 二叉树的最近公共祖先
2022-07-06 08:44:00 【Bertil】
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
示例 1:
输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出:3
解释:节点 5 和节点 1 的最近公共祖先是节点 3 。
示例 2:
输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
输出:5
解释:节点 5 和节点 4 的最近公共祖先是节点 5 。因为根据定义最近公共祖先节点可以为节点本身。
示例 3:
输入:root = [1,2], p = 1, q = 2
输出:1
提示:
- 树中节点数目在范围 [2, 10^5] 内。
- -10^9 <= Node.val <= 10^9
- 所有 Node.val 互不相同 。
- p != q
- p 和 q 均存在于给定的二叉树中。
解题思路
1.首先使用递归:root是null或者root等于p或q,说明root是p,q的公共祖先(递归结束),以此来递归左右子树
2.然后在左右子树递归完后进行判断
- 若左右子树递归函数返回的都不为空,则root就是p,q的公共祖先
- 若左子树递归函数返回的值为空,则p,q都在右子树,直接返回right即可
- 若右子树递归函数返回的值为空,则p,q都在左子树,直接返回left即可
代码
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */
/** * @param {TreeNode} root * @param {TreeNode} p * @param {TreeNode} q * @return {TreeNode} */
var lowestCommonAncestor = function(root, p, q) {
const travelTree = function(root, p, q) {
// 递归终止条件
if(root === null || root === p|| root === q) {
return root;
}
let left = travelTree(root.left, p, q);
let right = travelTree(root.right, p, q);
//如果在某一个节点的左右子树都能找到p和q,说明这个节点就是公共祖先
if(left !== null && right !== null) {
return root;
}
if(left === null) {
return right;
}
return left;
}
return travelTree(root, p, q);
};
边栏推荐
- PC easy to use essential software (used)
- ROS编译 调用第三方动态库(xxx.so)
- Bitwise logical operator
- Cisp-pte practice explanation
- 软件卸载时遇到trying to use is on a network resource that is unavailable
- The mysqlbinlog command uses
- Generator parameters incoming parameters
- The network model established by torch is displayed by torch viz
- 2022.02.13 - NC004. Print number of loops
- POI add write excel file
猜你喜欢

JVM 快速入门

软件卸载时遇到trying to use is on a network resource that is unavailable

What is CSRF (Cross Site Request Forgery)?

MySQL learning record 10getting started with JDBC

可变长参数

Fairguard game reinforcement: under the upsurge of game going to sea, game security is facing new challenges

Deep analysis of C language data storage in memory

Deep learning: derivation of shallow neural networks and deep neural networks

JVM quick start

角色动画(Character Animation)的现状与趋势
随机推荐
Unified ordering background interface product description Chinese garbled
vb.net 随窗口改变,缩放控件大小以及保持相对位置
sys. argv
Browser thread
Introduction to the differences between compiler options of GCC dynamic library FPIC and FPIC
Deep analysis of C language pointer
C语言双指针——经典题型
Bitwise logical operator
Navicat Premium 创建MySql 创建存储过程
tree树的精准查询
Simple use of promise in uniapp
Visual implementation and inspection of visdom
C語言雙指針——經典題型
How to conduct interface test? What are the precautions? Nanny level interpretation
China's high purity aluminum target market status and investment forecast report (2022 Edition)
win10系统中的截图,win+prtSc保存位置
Swagger setting field required is mandatory
Problems in loading and saving pytorch trained models
TP-LINK 企业路由器 PPTP 配置
Revit 二次开发 HOF 方式调用transaction