当前位置:网站首页>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);
};
边栏推荐
- C language double pointer -- classic question type
- swagger设置字段required必填
- Cisp-pte practice explanation
- How to effectively conduct automated testing?
- tree树的精准查询
- Excellent software testers have these abilities
- 自动化测试框架有什么作用?上海专业第三方软件测试公司安利
- China dihydrolaurenol market forecast and investment strategy report (2022 Edition)
- win10系统中的截图,win+prtSc保存位置
- 角色动画(Character Animation)的现状与趋势
猜你喜欢
Esp8266-rtos IOT development
egg. JS getting started navigation: installation, use and learning
C语言双指针——经典题型
[embedded] cortex m4f DSP Library
sublime text中conda环境中plt.show无法弹出显示图片的问题
Target detection - pytorch uses mobilenet series (V1, V2, V3) to build yolov4 target detection platform
JVM 快速入门
Warning in install. packages : package ‘RGtk2’ is not available for this version of R
FairGuard游戏加固:游戏出海热潮下,游戏安全面临新挑战
2022.02.13 - NC002. sort
随机推荐
ROS compilation calls the third-party dynamic library (xxx.so)
Computer cleaning, deleted system files
sublime text没关闭其他运行就使用CTRL+b运行另外的程序问题
Marathon envs project environment configuration (strengthen learning and imitate reference actions)
被破解毁掉的国产游戏之光
Process of obtaining the electronic version of academic qualifications of xuexin.com
Report on Market Research and investment prospects of China's silver powder industry (2022 Edition)
按位逻辑运算符
China dihydrolaurenol market forecast and investment strategy report (2022 Edition)
Research Report on Market Research and investment strategy of microcrystalline graphite materials in China (2022 Edition)
Visual implementation and inspection of visdom
MySQL learning records 12jdbc operation transactions
Detailed explanation of heap sorting
Revit 二次开发 HOF 方式调用transaction
Hutool gracefully parses URL links and obtains parameters
Crash problem of Chrome browser
logback1.3. X configuration details and Practice
Image, CV2 read the conversion and size resize change of numpy array of pictures
Screenshot in win10 system, win+prtsc save location
【MySQL】鎖