当前位置:网站首页>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);
};
边栏推荐
- 电脑清理,删除的系统文件
- [MySQL] log
- Chrome浏览器的crash问题
- ROS compilation calls the third-party dynamic library (xxx.so)
- Indentation of tabs and spaces when writing programs for sublime text
- Computer cleaning, deleted system files
- Target detection - pytorch uses mobilenet series (V1, V2, V3) to build yolov4 target detection platform
- egg. JS getting started navigation: installation, use and learning
- Warning in install. packages : package ‘RGtk2’ is not available for this version of R
- sys. argv
猜你喜欢

2022.02.13 - NC001. Reverse linked list

Restful API design specification

Deep analysis of C language data storage in memory

Guangzhou will promote the construction of a child friendly city, and will explore the establishment of a safe area 200 meters around the school

延迟初始化和密封类

MySQL learning record 10getting started with JDBC

Crash problem of Chrome browser

JVM performance tuning and practical basic theory - Part 1

2022.02.13 - NC002. sort

C语言双指针——经典题型
随机推荐
2022.02.13 - NC002. sort
tree树的精准查询
Roguelike game into crack the hardest hit areas, how to break the bureau?
【嵌入式】使用JLINK RTT打印log
Purpose of computer F1-F12
The network model established by torch is displayed by torch viz
View computer devices in LAN
2022.02.13 - NC004. Print number of loops
The mysqlbinlog command uses
个人电脑好用必备软件(使用过)
广州推进儿童友好城市建设,将探索学校周边200米设安全区域
On the inverse order problem of 01 knapsack problem in one-dimensional state
Mobile phones and computers on the same LAN access each other, IIS settings
[MySQL] lock
@Jsonbackreference and @jsonmanagedreference (solve infinite recursion caused by bidirectional references in objects)
JS inheritance method
【嵌入式】Cortex M4F DSP库
Charging interface docking tutorial of enterprise and micro service provider platform
Hutool gracefully parses URL links and obtains parameters
深度剖析C语言数据在内存中的存储