当前位置:网站首页>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);
};
边栏推荐
- Esp8266-rtos IOT development
- 如何进行接口测试测?有哪些注意事项?保姆级解读
- China polyether amine Market Forecast and investment strategy report (2022 Edition)
- sublime text没关闭其他运行就使用CTRL+b运行另外的程序问题
- Chrome浏览器的crash问题
- Navicat premium create MySQL create stored procedure
- 2022.02.13 - NC003. Design LRU cache structure
- Light of domestic games destroyed by cracking
- 【MySQL】鎖
- Marathon envs project environment configuration (strengthen learning and imitate reference actions)
猜你喜欢

Variable length parameter

vb.net 随窗口改变,缩放控件大小以及保持相对位置

Marathon envs project environment configuration (strengthen learning and imitate reference actions)

Using pkgbuild:: find in R language_ Rtools check whether rtools is available and use sys The which function checks whether make exists, installs it if not, and binds R and rtools with the writelines
![[embedded] print log using JLINK RTT](/img/22/c37f6e0f3fb76bab48a9a5a3bb3fe5.png)
[embedded] print log using JLINK RTT

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

Cisp-pte practice explanation

企微服务商平台收费接口对接教程

Current situation and trend of character animation

JVM performance tuning and practical basic theory - Part 1
随机推荐
Unsupported operation exception
Shift Operators
sublime text没关闭其他运行就使用CTRL+b运行另外的程序问题
C语言双指针——经典题型
【Nvidia开发板】常见问题集 (不定时更新)
Rviz仿真时遇到机器人瞬间回到世界坐标原点的问题及可能原因
torch建立的网络模型使用torchviz显示
PC easy to use essential software (used)
MySQL learning record 10getting started with JDBC
Problems in loading and saving pytorch trained models
JVM 快速入门
[embedded] print log using JLINK RTT
企微服务商平台收费接口对接教程
被破解毁掉的国产游戏之光
Deep analysis of C language pointer
China polyether amine Market Forecast and investment strategy report (2022 Edition)
sys. argv
@Jsonbackreference and @jsonmanagedreference (solve infinite recursion caused by bidirectional references in objects)
MySQL learning record 07 index (simple understanding)
C語言雙指針——經典題型