常考数据结构与算法:在二叉树中找到两个节点的最近公共祖先
题目描述
给定一棵二叉树以及这棵树上的两个节点 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;}
}
常考数据结构与算法:在二叉树中找到两个节点的最近公共祖先相关推荐
- 牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案
牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案 题目描述 给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 题解: 我们想想最 ...
- 在二叉树中找到两个节点的最近公共祖先(C++)
在二叉树中找到两个节点的最近公共祖先 描述 给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 数据范围:树上节点数满足1 ...
- 求二叉树中任意两个节点的最近公共祖先节点
思路:从根节点开始遍历,如果node1和node2中的任一个和root匹配,那么root就是最低公共祖先. 如果都不匹配,则分别递归左.右子树,如果有一个 节点出现在左子树,并且另一个节点出现在右子树 ...
- 常考数据结构与算法:输出二叉树的右视图
题目描述 请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图 上图树的右视图为:{1,4,3,7} 做此题之前可以先做下面3道题: 1. 常考数据结构与算法:求二叉树的层序遍历 2.常 ...
- 二叉树(二):判断是不是二叉搜索树、判断是不是完全二叉树、判断是不是平衡二叉树、二叉搜索树的最近公共祖先、在二叉搜索树中找到两个节点的最近公共祖先、序列化二叉树、重建二叉树、输出二叉树的右视图
目录 一.判断是不是二叉搜索树 1.1 题目 1.2 题解 二.判断是不是完全二叉树 2.1 题目 2.2 题解 三.判断是不是平衡二叉树 3.1 题目 3.2 题解 四.二叉搜索树的最近公共祖先 4 ...
- 常考数据结构与算法:求二叉树的层序遍历
题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树层序遍历的结果是 [ [3], [9,20], ...
- 常考数据结构与算法:重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5 ...
- 常考数据结构与算法:判断二叉树是否对称(迭代法,递归法)
给定一棵二叉树,判断琪是否是自身的镜像(即:是否对称) 例如:下面这棵二叉树是对称的 1 / \ 2 2 / \ / \ 3 4 4 3 下面这棵二叉树不对称 ...
- 二叉树中找两个结点的最近公共祖先结点
一.搜索二叉树:第一变种是二叉树是一种特殊的二叉树:查找二叉树.也就是树是排序过的,位于左子树上的结点都比父结点小,而位于右子树的结点都比父结点大.我们只需要从根结点开始和两个结点进行比较.如果当前结 ...
最新文章
- seaborn可视化多水平分类变量分组箱图boxplot并自定义多个箱体的顺序(Manually Order Boxes in Boxplot with Seaborn)
- RHEL6.4换CentOS源
- php纯面向过程--论坛
- python【数据结构与算法】计数问题(分治)
- 思维导图下载 注册安全_2019安全工程师《建筑实务》第二章第一节考点:物料提升机思维导图...
- 面向对象编程(OOP)和面向过程编程
- Java 常见的OOM类型总结
- 有关 Nintendo GameCube
- 前端学习(1293):系统模块path路径操作
- oracle如何并发重建索引,oracle数据库如何重建索引?
- linux查看db2存储过程,DB2查看存储过程里SQL语句的执行情况
- Python文件操作2
- 6年前的Dubbo,2年前的Spring Cloud,都被这个架构干掉了
- java ldap tls_ldap之tls 双向认证要我命
- 优化案例--改写IN条件为INNER JOIN
- 消息队列中点对点与发布订阅区别(good)
- 机器学习做自动聊天机器人_聊天机器人业务领袖指南
- ORACLE数据库自带的opath,oracle11.2.0.4.0 数据库安装
- MagicDraw-序列图
- window10截取动图(录制视频转gif)