Leetcode 236.二叉树的最近公共祖先
Time: 20190907
Type: Medium
题目描述
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]
示例 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。因为根据定义最近公共祖先节点可以为节点本身。
说明:
- 所有节点的值都是唯一的。
- p、q 为不同节点且均存在于给定的二叉树中。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
这是普通的二叉树,因此不能利用二叉搜索树特有的有序的特性,根据大小即可判断最近公共祖先的位置。
首先在二叉树中搜索给定的节点 p 和 q,然后找到它们的最近共同祖先。我们可以使用普通的树遍历来搜索这两个节点。一旦我们达到所需的节点 p 和 q,我们就可以回溯并找到最近的共同祖先。
作者:LeetCode
链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/solution/er-cha-shu-de-zui-jin-gong-gong-zu-xian-by-leetcod/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这是比较直观的想法,关键在于如何用代码实现这个逻辑。
代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = Noneclass Solution:def __init__(self):self.res = Nonedef lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':def dfs(root):if not root:return Falseleft = dfs(root.left)right = dfs(root.right)mid = (root == p or root == q)if mid + left + right >= 2:self.res = rootreturn mid or left or rightdfs(root)return self.res
END.
Leetcode 236.二叉树的最近公共祖先相关推荐
- 力扣(LeetCode)236. 二叉树的最近公共祖先(C语言)
一.环境说明 本文是 LeetCode 236. 二叉树的最近公共祖先,使用c语言实现. 递归. 测试环境:Visual Studio 2019. 二.代码展示 精简代码: struct TreeNo ...
- leetcode 236. 二叉树的最近公共祖先 递归解法 c语言
如题: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x, 满足 x 是 p.q ...
- LeetCode 236. 二叉树的最近公共祖先
文章目录 解法1:保存祖先节点+逐个判断 解法2:深度优先遍历 解法3:记录祖先节点 https://leetcode-cn.com/problems/lowest-common-ancestor-o ...
- 最近公共祖先_[LeetCode] 236. 二叉树的最近公共祖先
题目链接: https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree 难度:中等 通过率:57.2% 题目描述: ...
- leetcode 236. 二叉树的最近公共祖先LCA(后序遍历,回溯)
LCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先. 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科 ...
- [leetcode]236.二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x 是 p.q 的祖先且 ...
- leetcode 236. 二叉树的最近公共祖先 思考分析
目录 题目 思考分析 改进 本文章代码思路来源于公众号[代码随想录] 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个 ...
- LeetCode 236. 二叉树的最近公共祖先(递归)
题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q ...
- 【LeetCode】【HOT】236. 二叉树的最近公共祖先(递归)
[LeetCode][HOT]236. 二叉树的最近公共祖先 文章目录 [LeetCode][HOT]236. 二叉树的最近公共祖先 package hot;class TreeNode{int va ...
最新文章
- 泛型委托在项目中的应用
- zabbix snmp trap 监控
- python 实现卷积操作
- HDOJ 1202 The calculation of GPA
- 基于容器的全链路运维平台实践
- 菜鸟教程之工具使用(六)——让Maven项目直接在eclipse内部的Tomcat中执行
- RGB/YUV/YCbCr--关于显示,颜色你需要了解的一些事
- Java面向对象(5)--类的成员构造器(构造方法)
- Console.Write(程序猿?开发?写代码?编程?移动、网页、桌面开发?Oh,我连菜鸟都不是!);...
- 工作 10 年,月薪过万者不足三成,程序员却笑了!
- C语言知识点笔记完全整理
- 如何用用计算机名访问共享打印机,局域网怎么连接共享打印机共享
- SQL语法 Access
- vue+cesium实现风场
- 如何写好 5000 行的 SQL 代码
- ORACLE中dual的详解及其故障恢复
- Nginx设置访问Web页面时用户名密码验证
- 2022年起重机械指挥特种作业证考试题库模拟考试平台操作
- C#用Replace把字符替换成空
- 串口---串口通信数据位长度对传输数据的影响
热门文章
- Ubuntu学习日记--Lesson8:make 21 | tee log.txt命令解析 (错误输出,重定向,管道符)
- LeetCode-21.合并两个有序链表(链表+递归)
- OpenCV图像处理(12)——保存图像到指定位置
- android+p预览版小米,吃上安卓P!小米8更新首个Android P内测版
- 扫描仪twain驱动是什么_扫描仪无法显示怎么办 扫描仪无法显示解决方法【详解】...
- @param注解什么意思_Java反射是什么?看这篇绝对会了!
- android 日历_适用于Android的十大最佳日历应用
- scala unix时间戳_下载,在Linux,Unix,Windows上安装Scala
- python字符串find_Python字符串find()
- 2018年度报告单_2018年度最佳在线IT课程