Leetcode刷题236. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 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, 105] 内。
-109 <= Node.val <= 109
所有 Node.val 互不相同 。
p != q
p 和 q 均存在于给定的二叉树中。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
感谢大佬数据结构和算法的详细解法java代码递归和非递归图文详解
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
// return lowestCommonAncestorI(root, p, q);return lowestCommonAncestorII(root, p, q);}//方法二:迭代,记录每个节点的父节点//时间和空间复杂度O(N)private TreeNode lowestCommonAncestorII(TreeNode root, TreeNode p, TreeNode q) {Map<TreeNode, TreeNode> parent = new HashMap<>();Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);//根节点不存在父节点parent.put(root, null);//没有必要遍历全部节点,只要找到两个节点就可以while (!parent.containsKey(p) || !parent.containsKey(q)) {TreeNode node = queue.poll();if (node.left != null) {queue.offer(node.left);parent.put(node.left, node);}if (node.right != null) {queue.offer(node.right);parent.put(node.right, node);}}//记录p和p的祖先节点Set<TreeNode> ancestors = new HashSet<>();while (p != null) {ancestors.add(p);p = parent.get(p);}//查看p和它的祖先节点是否包含q节点,如果不包含再看是否包含q的祖先节点while (!ancestors.contains(q)) {q = parent.get(q);}return q;}//方法一:递归,时间和空间复杂度O(N)private TreeNode lowestCommonAncestorI(TreeNode root, TreeNode p, TreeNode q) {if (root == null) {return null;}return findLCA(root, p.val, q.val);}private TreeNode findLCA(TreeNode root, int val1, int val2) {if (root == null) {return null;}//如果找到一个值为val1或val2的节点,说明该节点就是LCA节点if (root.val == val1 || root.val == val2) {return root;}TreeNode left = findLCA(root.left, val1, val2);TreeNode right = findLCA(root.right, val1, val2);//如果一个节点能够在它的左右子树中分别找到p和q,则该节点为LCA节点if (left != null && right != null) {return root;}return left != null ? left : right;}
}
Leetcode刷题236. 二叉树的最近公共祖先相关推荐
- 【LeetCode笔记】236. 二叉树的最近公共祖先(Java、二叉树、DFS)
文章目录 题目描述 思路 & 代码 题目描述 ac了,但是看了题解发现有更好的做法 思路 & 代码 对于一个结点rootNode,p.q有这么几种情况: p.q分别在其左右子树中,那么 ...
- LeetCode二叉树系列——236.二叉树的最近公共祖先
一.题目描述: 236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表 ...
- 【LeetCode】【HOT】236. 二叉树的最近公共祖先(递归)
[LeetCode][HOT]236. 二叉树的最近公共祖先 文章目录 [LeetCode][HOT]236. 二叉树的最近公共祖先 package hot;class TreeNode{int va ...
- 力扣(LeetCode)236. 二叉树的最近公共祖先(C语言)
一.环境说明 本文是 LeetCode 236. 二叉树的最近公共祖先,使用c语言实现. 递归. 测试环境:Visual Studio 2019. 二.代码展示 精简代码: struct TreeNo ...
- 【经典算法题】二叉树的最近公共祖先
[经典算法题]二叉树的最近公共祖先 Leetcode 0235 二叉搜索树的最近公共祖先 题目描述:Leetcode 0235 二叉搜索树的最近公共祖先 分析 本题的考点:LCA(最近公共祖先). 关 ...
- Suzy找到实习了吗 Day 21 | 二叉树进行中:530. 二叉搜索树的最小绝对差,501. 二叉搜索树中的众数,236. 二叉树的最近公共祖先
530. 二叉搜索树的最小绝对差 题目 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 .差值是一个正数,其数值等于两值之差的绝对值. solution # Defi ...
- leetcode 236. 二叉树的最近公共祖先 递归解法 c语言
如题: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x, 满足 x 是 p.q ...
- 最近公共祖先_leetcode No.236 二叉树的最近公共祖先
承接二叉搜索树的最近公共祖先. 题目链接: 二叉树的最近公共祖先 - 力扣(LeetCode)leetcode-cn.com 题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百 ...
- LeetCode刷题笔记 二叉树 二叉搜索树的操作
669 修剪二叉搜索树 给定一个二叉查找树和两个整数 L 和 R,且 L < R,试修剪此二叉查找树,使得修剪后所有节点的值都在 [L, R] 的范围内. 输入是一个二叉查找树和两个整数 ...
最新文章
- 客户管理系统企业客户管理crm客户管理
- 四层交换机是什么?有什么用?与二层/三层交换机有何区别?
- django 单元测试小结
- 数据科学竞赛-人脸表情识别
- 【C/C++ 汇编语言 Verilog】越界截断——数据越界问题的多角度分析
- 《趋势的力量》-- 观念决定了个人发展的战略路线(大学生选择专业、就业、考研与否的建议)
- exists sql用法_彻底弄懂sql select各种查询用法
- 乐高小颗粒履带机器人_乐高搭建+乐高编程…快带小朋友来漳州这家培训中心,边玩边学...
- (非本校)湖南工业大学个人选拔赛第一场 解题报告
- iOS不再美好 安卓收入逼近千万
- 李健清华计算机专业,计算机DeepWeb数据库的分类研究李健
- 阿里云上创建 对象存储oss
- 本地网络出现了一个意外的情况,不能完成所有你在设置中所要求的更改?
- C++多态的职工管理系统
- ABAP BAPI 复制标准项目模板实现项目立项
- 中南大学计算机学院研究生录取分数线,中南大学研究生录取分数线
- macOS Mojave 10.14.6 18G103 正式版 with Clover 5091原版镜像[双EFI双平台终极版]
- 谷歌文件系统论文中文版
- 浏览ASP时遇到以下错误: Microsoft VBScript 运行时错误 错误 '800A01AD' ActiveX 部件不能创建对象:'NetBox.HttpServer'
- 程序员是否可以在家办公——在家办公的利与弊
热门文章
- ClearCase洋文翻译-rebase(变基)
- BPM180_STM32F103系列驱动代码,加入了移动平均值滤波算法
- RFID室内定位之landmarc算法
- EAV模型 Entity-Attribute-Value
- C# Queue与RabbitMQ的爱恨情仇(文末附源码):Q与MQ消息队列简单应用(一)
- myFAX网络传真服务器与同类产品比较的优势
- 劲舞团服务器维护结束后的服装,劲舞团手游12月1日更新内容 新增新时装、冬季恋歌活动更新[图]...
- 语音识别工具箱之kaldi介绍
- scss里用calc计算百分比
- 统一将gif格式的图片转换为gpj