题目:

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

最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

例如,给定如下二叉树:  root = [3,5,1,6,2,0,8,null,null,7,4]

方法一:

注意p,q必然存在树内, 且所有节点的值唯一!!!递归思想, 对以root为根的(子)树进行查找p和q, 如果root == null || p || q 直接返回root表示对于当前树的查找已经完毕, 否则对左右子树进行查找, 根据左右子树的返回值判断:1. 左右子树的返回值都不为null, 由于值唯一左右子树的返回值就是p和q, 此时root为LCA2. 如果左右子树返回值只有一个不为null, 说明只有p和q存在与左或右子树中, 最先找到的那个节点为LCA3. 左右子树返回值均为null, p和q均不在树中, 返回null
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root==null || root==p || root==q)return root;TreeNode left = lowestCommonAncestor(root.left, p, q);TreeNode right = lowestCommonAncestor(root.right, p, q);if(left==null && right==null)return null;else if(left!=null && right!=null)return root;else return left==null?right:left;
}

方法二:

参照LCA问题.

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {// LCA 问题,查阅相关资料if (root == null) {return root;}if (root == p || root == q) {return root;}TreeNode left = lowestCommonAncestor(root.left, p, q);TreeNode right = lowestCommonAncestor(root.right, p, q);if (left != null && right != null) {return root;} else if (left != null) {return left;} else if (right != null) {return right;}return null;
}

二叉树最近公共祖先 LCA相关推荐

  1. 最近公共祖先 (LCA) [No. 21]

    问题: 给定一个二叉树,找到两个节点NA, NB的最近公共祖先(LCA). 比如对于下图,4 和 7 的 LCA 是6, 1和13的LCA 是 8. 我们这里先考虑一般的二叉树(BT),然后再考虑这个 ...

  2. POJ 1330 Nearest Common Ancestors / UVALive 2525 Nearest Common Ancestors (最近公共祖先LCA)...

    POJ 1330 Nearest Common Ancestors / UVALive 2525 Nearest Common Ancestors (最近公共祖先LCA) Description A ...

  3. 【C++】最近公共祖先 LCA

    最近公共祖先 百科名片 简单引入 LCA的算法 暴力枚举法 Tarjan离线算法 倍增算法 例题: 题目描述 输入描述 输出描述 样例输入 样例输出 代码 百科名片 最近公共祖先 Lowest Com ...

  4. 二叉树的公共祖先问题

    二刷随想录的时候发现,二叉树的公共祖先问题有一个点很巧妙,在这里记录下来,也作为之后复习用的笔记. 记录内容就以随想录的两道题为主. 1.二叉树的最近公共祖先 对应题目236. 二叉树的最近公共祖先 ...

  5. 树上倍增法求最近公共祖先LCA

    LCA,最近公共祖先,这个东西有很多作用,因此,如何高效求出LCA就成了一个热点的讨论话题. 下面所有的讨论都以图中这棵树为例子. 先来了解下什么是倍增吧,倍增其实就是二分的逆向,二分是逐渐缩小范围, ...

  6. 图论--最近公共祖先LCA

    最近公共祖先LCA LCA(Least Common Ancestors),即最近公共祖先,是指这样一个问题:在有根树中,找出某两个结点u和v最近的公共祖先(另一种说法,离树根最远的公共祖先) 最近公 ...

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

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

  8. 二叉树最近公共祖先节点

    寻找最近公共祖先节点(LCA) 在一棵二叉树中,对于节点X和节点Y,X和Y的LCA是这棵树中X和Y的第一个共同祖先.寻找公共节点的算法思路很简单:对于节点x和y,找到树的根节点分别到x节点和y节点的路 ...

  9. 两节点的最小公共祖先LCA

    一.二叉搜索树中两节点的最小公共祖先: 最初级的题目,在一颗二叉搜索树中寻找两节点的最小公共祖先.根据二叉搜索树的特征,从根节点开始查找,若两节点的val值都小于当前节点,则他们的最小公共祖先就去左子 ...

最新文章

  1. java 初始化系统参数_系统中参数的初始化 参数在系统中配置
  2. 根据key删除Map集合中的key-value映射
  3. sql substr切割字符串
  4. mybatis动态查询列名,#与¥
  5. 标题:ASP.NET几种进行性能优化的方法及注意问题
  6. centos7 php无法启动服务器,关于Centos7下Apache服务器php应用phpMyAdmin无法正常运行的问题...
  7. SQL Server 2008中SQL之WaitFor
  8. 20165115 2017-2018-2 《Java程序设计》第六周学习总结
  9. 移动web:tab选项卡
  10. hustoj 服务器配置
  11. 【PCL】SolidWorks 三维建模 STL, OBJ 采样生成 PCD 点云数据(附源码)
  12. 用树莓派实现宽带多次拨号,带宽叠加
  13. 双十二|Solidigm官方店铺 惊喜大放送 福利享不停
  14. Nacos注册中心AP架构源码(Distro)下篇
  15. 曲线图chart.js插件例子
  16. python推箱子小游戏
  17. [附源码]计算机毕业设计基于Springboot校园订餐管理系统
  18. DSP实验报告—实验8  单路、多路数模转换(DA)
  19. 【Java基础】迷宫问题的Java代码实现
  20. 数字化时代-9:从四次工业革命看未来行业的方向

热门文章

  1. 利用路由器端口映射远程连接
  2. SlickEdit 2010的破解方法
  3. 近期找工作无果的一些感想
  4. 把这个写成一个类吧TREEVIEW
  5. python读取log文件生成图形表_python提取log文件内容并画出图表
  6. java hql 查询所有内容,HQL查询语言转载
  7. 观电台大神弹吉他有感
  8. AR科技贯穿里约奥运始终 腾讯QQ营销顺风车值了
  9. Intellij IDE 必知配置
  10. 皕杰报表和炎黄盈动(AWS BPM)集成 操作手册