题目描述

给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。   假设节点的值都大于0.

比如9,10的最近公共祖先节点是2.

思路:

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

public class LowestCommonAncestor {public static void main(String[] args) {}/**** @param root TreeNode类* @param o1 int整型* @param o2 int整型* @return int整型*/public int lowestCommonAncestor (TreeNode root, int o1, int o2) {//递归的出口if(root==null){return 0;}if(o1==root.val||o2==root.val){return root.val;}//递归调用int left=lowestCommonAncestor(root.left,o1,o2);  //左子树int right=lowestCommonAncestor(root.right,o1,o2); //右子树if(left > 0 && right > 0){return root.val;}if (left > 0 )return left;elsereturn right;}
}

常考数据结构与算法:在二叉树中找到两个节点的最近公共祖先相关推荐

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

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

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

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

  3. 求二叉树中任意两个节点的最近公共祖先节点

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

  4. 常考数据结构与算法:输出二叉树的右视图

    题目描述 请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图 上图树的右视图为:{1,4,3,7} 做此题之前可以先做下面3道题: 1. 常考数据结构与算法:求二叉树的层序遍历 2.常 ...

  5. 二叉树(二):判断是不是二叉搜索树、判断是不是完全二叉树、判断是不是平衡二叉树、二叉搜索树的最近公共祖先、在二叉搜索树中找到两个节点的最近公共祖先、序列化二叉树、重建二叉树、输出二叉树的右视图

    目录 一.判断是不是二叉搜索树 1.1 题目 1.2 题解 二.判断是不是完全二叉树 2.1 题目 2.2 题解 三.判断是不是平衡二叉树 3.1 题目 3.2 题解 四.二叉搜索树的最近公共祖先 4 ...

  6. 常考数据结构与算法:求二叉树的层序遍历

    题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树层序遍历的结果是 [ [3], [9,20], ...

  7. 常考数据结构与算法:重建二叉树

    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5 ...

  8. 常考数据结构与算法:判断二叉树是否对称(迭代法,递归法)

    给定一棵二叉树,判断琪是否是自身的镜像(即:是否对称) 例如:下面这棵二叉树是对称的      1     /  \   2    2  / \    / \ 3 4  4  3 下面这棵二叉树不对称 ...

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

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

最新文章

  1. seaborn可视化多水平分类变量分组箱图boxplot并自定义多个箱体的顺序(Manually Order Boxes in Boxplot with Seaborn)
  2. RHEL6.4换CentOS源
  3. php纯面向过程--论坛
  4. python【数据结构与算法】计数问题(分治)
  5. 思维导图下载 注册安全_2019安全工程师《建筑实务》第二章第一节考点:物料提升机思维导图...
  6. 面向对象编程(OOP)和面向过程编程
  7. Java 常见的OOM类型总结
  8. 有关 Nintendo GameCube
  9. 前端学习(1293):系统模块path路径操作
  10. oracle如何并发重建索引,oracle数据库如何重建索引?
  11. linux查看db2存储过程,DB2查看存储过程里SQL语句的执行情况
  12. Python文件操作2
  13. 6年前的Dubbo,2年前的Spring Cloud,都被这个架构干掉了
  14. java ldap tls_ldap之tls 双向认证要我命
  15. 优化案例--改写IN条件为INNER JOIN
  16. 消息队列中点对点与发布订阅区别(good)
  17. 机器学习做自动聊天机器人_聊天机器人业务领袖指南
  18. ORACLE数据库自带的opath,oracle11.2.0.4.0 数据库安装
  19. MagicDraw-序列图
  20. window10截取动图(录制视频转gif)

热门文章

  1. go语言中将函数作为变量传递
  2. android 开发错误点滴积累--Asset资源管理
  3. 【郭林专刊】MVC已过时,MOVE时代来临?
  4. Vue开发异常: Error: custom keyword definition is invalid: data.errors should be boolean
  5. CM005-逆向分析过程(上篇)
  6. std::vector使用简介
  7. php接收ajax转数组
  8. nginx 安装 虚拟主机
  9. [NOIP2007] 提高组 洛谷P1099 树网的核
  10. 如何画好科技论文中的插图