当前位置:网站首页>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);
};
边栏推荐
- How to effectively conduct automated testing?
- 电脑清理,删除的系统文件
- Roguelike game into crack the hardest hit areas, how to break the bureau?
- 广州推进儿童友好城市建设,将探索学校周边200米设安全区域
- 如何进行接口测试测?有哪些注意事项?保姆级解读
- Marathon envs project environment configuration (strengthen learning and imitate reference actions)
- China Light conveyor belt in-depth research and investment strategy report (2022 Edition)
- Current situation and trend of character animation
- On the inverse order problem of 01 knapsack problem in one-dimensional state
- Browser thread
猜你喜欢
可变长参数
ROS compilation calls the third-party dynamic library (xxx.so)
Promise 在uniapp的简单使用
JVM performance tuning and practical basic theory - Part 1
Esp8266-rtos IOT development
sublime text没关闭其他运行就使用CTRL+b运行另外的程序问题
MySQL learning records 12jdbc operation transactions
Warning in install. packages : package ‘RGtk2’ is not available for this version of R
704 二分查找
After PCD is converted to ply, it cannot be opened in meshlab, prompting error details: ignored EOF
随机推荐
C语言深度解剖——C语言关键字
Colorlog combined with logging to print colored logs
What is CSRF (Cross Site Request Forgery)?
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
Verrouillage [MySQL]
[NVIDIA development board] FAQ (updated from time to time)
China's high purity aluminum target market status and investment forecast report (2022 Edition)
电脑清理,删除的系统文件
Precise query of tree tree
704 binary search
[brush questions] top101 must be brushed in the interview of niuke.com
Mobile phones and computers on the same LAN access each other, IIS settings
Deep analysis of C language data storage in memory
Visual implementation and inspection of visdom
TP-LINK 企业路由器 PPTP 配置
China vanadium battery Market Research and future prospects report (2022 Edition)
JVM quick start
移位运算符
JVM 快速入门
Trying to use is on a network resource that is unavailable