思路:从根节点开始遍历,如果node1和node2中的任一个和root匹配,那么root就是最低公共祖先。 如果都不匹配,则分别递归左、右子树,如果有一个 节点出现在左子树,并且另一个节点出现在右子树,则root就是最低公共祖先.  如果两个节点都出现在左子树,则说明最低公共祖先在左子树中,否则在右子树。

TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {  //发现目标节点则通过返回值标记该子树发现了某个目标结点  if(root == null || root == p || root == q) return root;  //查看左子树中是否有目标结点,没有为null  TreeNode left = lowestCommonAncestor(root.left, p, q);  //查看右子树是否有目标节点,没有为null  TreeNode right = lowestCommonAncestor(root.right, p, q);  //都不为空,说明做右子树都有目标结点,则公共祖先就是本身  if(left!=null&&right!=null) return root;  //如果发现了目标节点,则继续向上标记为该目标节点  return left == null ? right : left;  }  

求二叉树中任意两个节点的最近公共祖先节点相关推荐

  1. 二叉树中找两个结点的最近公共祖先结点

    一.搜索二叉树:第一变种是二叉树是一种特殊的二叉树:查找二叉树.也就是树是排序过的,位于左子树上的结点都比父结点小,而位于右子树的结点都比父结点大.我们只需要从根结点开始和两个结点进行比较.如果当前结 ...

  2. 二叉树中任意两个节点的距离

    题目: 一个普通二叉树,如何找到两个给定节点之间的距离? ,其中二叉树中每个结点的值都不相同 思路:两个节点之间的最短路径一定会经过两个节点的最小公共祖先,所以我们可以用LCA(最低公共祖先)的解法. ...

  3. 牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案

    牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案 题目描述 给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 题解: 我们想想最 ...

  4. 在二叉树中找到两个节点的最近公共祖先(C++)

    在二叉树中找到两个节点的最近公共祖先 描述   给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 数据范围:树上节点数满足1 ...

  5. 二叉链表之寻找两节点的最近公共祖先☆

    题目:p.q分别为指向该二叉树中任意两个节点的指针,试编写算法ancestor(root,p,q,r),找到p.q的最近公共祖先节点r 分析:         上一道题其实可以给我们一些启示,就是我们 ...

  6. 求节点p和q的最近公共祖先节点

    //求节点p和q的最近公共祖先节点,假设用后序遍历先遇到p节点 typedef struct{BiTree t;int tag; //tag=0表示左子女已被访问,tag=1表示右子女已被访问. }s ...

  7. 经典算法——二叉搜索树的公共祖先节点

    介绍 二叉搜索树的公共祖先节点是指:对于给定的两个节点p.q,向上寻找离二者最近的公共节点. public class Node<T extends Comparable<T>> ...

  8. 微软算法100题11 求二叉树中两节点之间的最大距离

    第11 题 求二叉树中节点的最大距离... 如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的, 我们姑且定义"距离"为两节点之间边的个数. 写一个程序, 求一棵二叉树中相 ...

  9. 求一颗二叉树中两个节点的最低公共父节点

    题目:求一棵二叉树中两个节点的最低公共父节点 思路:递归 和 非递归 public static TreeNode getLastCommonParentRec(TreeNode root, Tree ...

最新文章

  1. matlab 定义string_MATLAB开发自动驾驶第十课-创建用于加载自定义地面真值数据源的类...
  2. 项目中用到的设计模式(持续更新)
  3. 《深入浅出nodejs》读书笔记(3)
  4. 技术转管理?这些“坑”你要绕道走
  5. 演练 构造函数的显示调用与隐式调用 c# 1613715344
  6. filepermission java,Java FilePermission getActions()方法与示例
  7. Vue 自定义按键修饰符对应表
  8. 2022互联网大厂新年礼盒:腾讯向善、阿里家书、百度箱包抢镜!
  9. WINX的消息分派机制(续)
  10. php 如何区分0和false,php中怎么区别false与0
  11. 计算机图形学概论论文5000字,关于计算机图形学探究的论文
  12. 染布厂ERP、染厂ERP、漂染厂ERP、纺织印染ERP生产管理系统
  13. java如果是晴天如果是男人_三、没有测光表时的曝光:“晴天 f/16”法则(转自 色影无忌)...
  14. .NET MCV Swagger 安装和配置
  15. excel计算数据时固定某一列或一行或某一值
  16. 洗礼灵魂,修炼python(82)--全栈项目实战篇(10)—— 信用卡+商城项目(模拟京东淘宝)...
  17. java 获取路由器mac_求好人帮助,如何用java语言获取像无线路由器上的MAC地址,我会重赏...
  18. 猎人稀有宠物抓获地点坐标大全
  19. python爬斗鱼直播官网,【爬虫】nodejs爬斗鱼直播间数据实战
  20. 线程池与Android的日日夜夜

热门文章

  1. 爬虫-IP被封解决办法
  2. 5.21 戒网第二天 转移注意力 不看游戏 对对联 写软件
  3. [C++报错] [Error] expected initializer before ‘Line‘
  4. 用计算机怎么做蒙特卡洛模拟,一篇文章讲明白蒙特卡洛模拟
  5. 第二章 什么是销售漏斗及价值?
  6. 二维码扫码登录的背后 ...
  7. 计算机采用补码存储数据吗,为什么计算机用补码存储数据?
  8. 2002年考研数学一真题pdf
  9. SourceTree删除之前保存的github的账户信息
  10. C++ ,预测身高程序