当前位置:网站首页>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);
};
边栏推荐
- Fairguard game reinforcement: under the upsurge of game going to sea, game security is facing new challenges
- 2022.02.13 - NC004. Print number of loops
- Research Report on supply and demand and development prospects of China's high purity aluminum market (2022 Edition)
- JS inheritance method
- Introduction to the differences between compiler options of GCC dynamic library FPIC and FPIC
- MySQL learning record 10getting started with JDBC
- Modify the video name from the name mapping relationship in the table
- Variable length parameter
- C語言雙指針——經典題型
- China vanadium battery Market Research and future prospects report (2022 Edition)
猜你喜欢

Restful API design specification

2022.02.13 - NC004. Print number of loops

ROS编译 调用第三方动态库(xxx.so)

Chrome浏览器的crash问题

Current situation and trend of character animation

角色动画(Character Animation)的现状与趋势

2022.02.13 - NC002. sort

Charging interface docking tutorial of enterprise and micro service provider platform

【ROS】usb_cam相机标定

Tcp/ip protocol
随机推荐
Cisp-pte practice explanation
2022.02.13 - NC003. Design LRU cache structure
【MySQL】鎖
2022.02.13 - NC004. Print number of loops
Trying to use is on a network resource that is unavailable
Computer cleaning, deleted system files
How to effectively conduct automated testing?
Charging interface docking tutorial of enterprise and micro service provider platform
[MySQL] lock
Bottom up - physical layer
egg. JS getting started navigation: installation, use and learning
The problem and possible causes of the robot's instantaneous return to the origin of the world coordinate during rviz simulation
MySQL learning record 10getting started with JDBC
Chrome浏览器的crash问题
Generator parameters incoming parameters
sublime text中conda环境中plt.show无法弹出显示图片的问题
swagger设置字段required必填
ROS compilation calls the third-party dynamic library (xxx.so)
pcd转ply后在meshlab无法打开,提示 Error details: Unespected eof
Sublime text in CONDA environment plt Show cannot pop up the problem of displaying pictures