当前位置:网站首页>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);
};
边栏推荐
- PLT in Matplotlib tight_ layout()
- 电脑F1-F12用途
- 如何进行接口测试测?有哪些注意事项?保姆级解读
- ESP8266-RTOS物联网开发
- C語言雙指針——經典題型
- UnsupportedOperationException异常
- marathon-envs项目环境配置(强化学习模仿参考动作)
- Bitwise logical operator
- [brush questions] top101 must be brushed in the interview of niuke.com
- Marathon envs project environment configuration (strengthen learning and imitate reference actions)
猜你喜欢
Esp8266-rtos IOT development
Simple use of promise in uniapp
Light of domestic games destroyed by cracking
[MySQL] log
2022.02.13 - 238. Maximum number of "balloons"
MySQL learning record 10getting started with JDBC
sublime text没关闭其他运行就使用CTRL+b运行另外的程序问题
visdom可视化实现与检查介绍
Computer cleaning, deleted system files
marathon-envs项目环境配置(强化学习模仿参考动作)
随机推荐
企微服务商平台收费接口对接教程
Screenshot in win10 system, win+prtsc save location
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
China's high purity aluminum target market status and investment forecast report (2022 Edition)
MySQL learning record 11jdbcstatement object, SQL injection problem and Preparedstatement object
生成器参数传入参数
2022.02.13 - NC004. Print number of loops
Excellent software testers have these abilities
JS native implementation shuttle box
Roguelike game into crack the hardest hit areas, how to break the bureau?
Function coritization
egg. JS getting started navigation: installation, use and learning
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
marathon-envs项目环境配置(强化学习模仿参考动作)
Deep analysis of C language data storage in memory
Verrouillage [MySQL]
自动化测试框架有什么作用?上海专业第三方软件测试公司安利
poi追加写EXCEL文件
[brush questions] top101 must be brushed in the interview of niuke.com
What are the common processes of software stress testing? Professional software test reports issued by companies to share