Leetcode--236. 二叉树的最近公共祖先(Java)
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 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 为不同节点且均存在于给定的二叉树中。
代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null){//遍历到叶节点,还没找到p,q,说明这条路径不存在p,q,也就不存在祖先
return null;
}
if(root==p||root==q){//如果p或q等于root,说明找到了p或者q,返回他的值
return root;
}
TreeNode left = lowestCommonAncestor(root.left,p,q);
TreeNode right = lowestCommonAncestor(root.right,p,q);
if(left!=null&&right!=null){//root的左右分别是p,q,那么root就是祖先
return root;
}else if(left!=null){//root的右边没找到pq,那么左边就是祖先结点
return left;
}else if(right!=null){//...
return right;
}
return null;//如果左右都为空,那么一定是null,不存在要找的结点
}
}
tips:虽然ac了,但是自己找案例还是有一些bug,比如在题上给的案例中寻找5,10两个结点,一个存在于这个二叉树,而另一个结点不存在,仍然返回5,而不是null
Leetcode--236. 二叉树的最近公共祖先(Java)相关推荐
- 力扣(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.二叉树的最近公共祖先
Time: 20190907 Type: Medium 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p. ...
- [leetcode]236.二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x 是 p.q 的祖先且 ...
- leetcode 236. 二叉树的最近公共祖先 思考分析
目录 题目 思考分析 改进 本文章代码思路来源于公众号[代码随想录] 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个 ...
- LeetCode 236. 二叉树的最近公共祖先(递归)
题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q ...
- 236. 二叉树的最近公共祖先 java解决
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x 是 p.q 的祖先且 ...
最新文章
- wowza官方测试报告
- ssh报错 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
- nginx 允许跨域_细谈跨域请求的桥梁
- 安装php报错误2356,linux下Mysql+php5+apache安装手记
- wxWidgets:显示和测试 wxDC 功能
- No module named ‘XX‘
- 输入序列连续的序列检测
- google搜索引擎优化指南_Google谷歌SEO怎么优化?|新手入门完全指南
- SAP 学习笔记 --- 04-26 02.Material Master
- Spring: 事务传播机制
- 大数据处理与分析方向主要干什么_不了解干法制砂?6个影响干法制砂效果的主要因素及干法制砂生产加工7大技术要点分析...
- C++数据类型之结构体的练习(用到结构体的赋值,利用结构体元素排序以及查找)
- readlink()不能读取硬链接的目标
- idea 设置重复代码检测
- 利用FME创建CAD标准图层模板
- Python3程序设计编程题解
- scikit-learn回归类库使用
- matlab 汉字是方块,linux下Matlab 2020中文字体方框问题解决方法
- osg 基本几何图元
- 机房温度可视化:物联网下的数据中心环境运维新方式
热门文章
- LeetCode 259. 较小的三数之和(固定一点,内层双指针)
- 程序员面试金典 - 面试题 03.05. 栈排序(两栈)
- LeetCode 829. 连续整数求和(数学)
- LeetCode 695. 岛屿的最大面积(图的BFS/DFS)
- LeetCode 69. x 的平方根(二分查找)
- 石头剪刀布程序流程图_机器学习终章:剪刀石头布猜拳机器人
- adhoc包无法安装_iOS 5.1.1 设备不能安装AdHoc问题版本号
- VC.NET字符指针与String的转换
- libusb android pc,libusb
- 奇数阶幻方 java_N(奇数)阶幻方-java实现代码