给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 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)相关推荐

  1. 力扣(LeetCode)236. 二叉树的最近公共祖先(C语言)

    一.环境说明 本文是 LeetCode 236. 二叉树的最近公共祖先,使用c语言实现. 递归. 测试环境:Visual Studio 2019. 二.代码展示 精简代码: struct TreeNo ...

  2. leetcode 236. 二叉树的最近公共祖先 递归解法 c语言

    如题: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x, 满足 x 是 p.q ...

  3. LeetCode 236. 二叉树的最近公共祖先

    文章目录 解法1:保存祖先节点+逐个判断 解法2:深度优先遍历 解法3:记录祖先节点 https://leetcode-cn.com/problems/lowest-common-ancestor-o ...

  4. 最近公共祖先_[LeetCode] 236. 二叉树的最近公共祖先

    题目链接: https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree 难度:中等 通过率:57.2% 题目描述: ...

  5. leetcode 236. 二叉树的最近公共祖先LCA(后序遍历,回溯)

    LCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先. 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科 ...

  6. Leetcode 236.二叉树的最近公共祖先

    Time: 20190907 Type: Medium 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p. ...

  7. [leetcode]236.二叉树的最近公共祖先

    给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x 是 p.q 的祖先且 ...

  8. leetcode 236. 二叉树的最近公共祖先 思考分析

    目录 题目 思考分析 改进 本文章代码思路来源于公众号[代码随想录] 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个 ...

  9. LeetCode 236. 二叉树的最近公共祖先(递归)

    题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q ...

  10. 236. 二叉树的最近公共祖先 java解决

    给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x 是 p.q 的祖先且 ...

最新文章

  1. wowza官方测试报告
  2. ssh报错 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
  3. nginx 允许跨域_细谈跨域请求的桥梁
  4. 安装php报错误2356,linux下Mysql+php5+apache安装手记
  5. wxWidgets:显示和测试 wxDC 功能
  6. No module named ‘XX‘
  7. 输入序列连续的序列检测
  8. google搜索引擎优化指南_Google谷歌SEO怎么优化?|新手入门完全指南
  9. SAP 学习笔记 --- 04-26 02.Material Master
  10. Spring: 事务传播机制
  11. 大数据处理与分析方向主要干什么_不了解干法制砂?6个影响干法制砂效果的主要因素及干法制砂生产加工7大技术要点分析...
  12. C++数据类型之结构体的练习(用到结构体的赋值,利用结构体元素排序以及查找)
  13. readlink()不能读取硬链接的目标
  14. idea 设置重复代码检测
  15. 利用FME创建CAD标准图层模板
  16. Python3程序设计编程题解
  17. scikit-learn回归类库使用
  18. matlab 汉字是方块,linux下Matlab 2020中文字体方框问题解决方法
  19. osg 基本几何图元
  20. 机房温度可视化:物联网下的数据中心环境运维新方式

热门文章

  1. LeetCode 259. 较小的三数之和(固定一点,内层双指针)
  2. 程序员面试金典 - 面试题 03.05. 栈排序(两栈)
  3. LeetCode 829. 连续整数求和(数学)
  4. LeetCode 695. 岛屿的最大面积(图的BFS/DFS)
  5. LeetCode 69. x 的平方根(二分查找)
  6. 石头剪刀布程序流程图_机器学习终章:剪刀石头布猜拳机器人
  7. adhoc包无法安装_iOS 5.1.1 设备不能安装AdHoc问题版本号
  8. VC.NET字符指针与String的转换
  9. libusb android pc,libusb
  10. 奇数阶幻方 java_N(奇数)阶幻方-java实现代码