LeetCode——二叉树的最近公共祖先
此问题也成为LCA问题
题目描述:
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
输入: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 。因为根据定义最近公共祖先节点可以为节点本身。
示例 3:
输入:root = [1,2], p = 1, q = 2
输出:1
解决办法:
临界条件
(1)判断根结点是否是空节点,如果是,那么肯定就可以马上返回了
(2)如果根结点就等于q结点或p结点的情况如果根结点为二者之一,那么根结点就必定是最近公共祖先了,这时直接返回root即可
如果上面两种情况都不是,那么就分别进入到根节点的左边和右边进行递归遍历,以下分为四种情况:
第一种情况:左子树和右子树均找没有p结点或者q结点;
第二种情况:左子树上能找到,但是右子树上找不到,此时就应当直接返回左子树的查找结果;
第三种情况:右子树上能找到,但是左子树上找不到,此时就应当直接返回右子树的查找结果;
第四种情况:左右子树上均能找到,说明此时的p结点和q结点分居root结点两侧,此时就应当直接返回root结点了。
/*** 1.首先判断q或者q是不是当前的根,如果是,则直接返回当前根* 2.如果不是,那么分别取左边和右边去找* (2.1)如果左边不为空,右边也不为空,那么根就是祖先* (2.2)如果左边不为空,右边为空,那么左边遇到的第一个节点就是公共祖先* (2.3)如果左边为空,右边不为空,那么右边遇到的第一个节点就是公共祖先*/public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root == null){return null;}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;}if(left != null && right == null){return left;}if(left == null && right != null){return right;}return null;}
LeetCode——二叉树的最近公共祖先相关推荐
- LeetCode 1676. 二叉树的最近公共祖先 IV
文章目录 1. 题目 2. 解题 1. 题目 给定一棵二叉树的根节点 root 和 TreeNode 类对象的数组(列表) nodes,返回 nodes 中所有节点的最近公共祖先(LCA). 数组(列 ...
- 【LeetCode】【HOT】236. 二叉树的最近公共祖先(递归)
[LeetCode][HOT]236. 二叉树的最近公共祖先 文章目录 [LeetCode][HOT]236. 二叉树的最近公共祖先 package hot;class TreeNode{int va ...
- 【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先
[LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 一.DFS 一.DFS 祖先的定义 ...
- 力扣(LeetCode)236. 二叉树的最近公共祖先(C语言)
一.环境说明 本文是 LeetCode 236. 二叉树的最近公共祖先,使用c语言实现. 递归. 测试环境:Visual Studio 2019. 二.代码展示 精简代码: struct TreeNo ...
- LeetCode二叉树系列——236.二叉树的最近公共祖先
一.题目描述: 236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表 ...
- leetcode 236. 二叉树的最近公共祖先 递归解法 c语言
如题: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x, 满足 x 是 p.q ...
- 最近公共祖先_leetcode No.236 二叉树的最近公共祖先
承接二叉搜索树的最近公共祖先. 题目链接: 二叉树的最近公共祖先 - 力扣(LeetCode)leetcode-cn.com 题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百 ...
- 奇安信集团笔试题:二叉树的最近公共祖先(leetcode236),杀死进程(leetcode582)...
1. 二叉树最近公共祖先 奇安信集团 2020校招 服务端开发-应用开发方向在线考试 编程题|20分2/2 寻祖问宗 时间限制:C/C++语言 1000MS:其他语言 3000MS 内存限制:C/C+ ...
- 代码随想录算法训练营第22天 二叉树 java :235. 二叉树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
文章目录 LeetCode 236. 二叉树的最近公共祖先 题目讲解 思路 LeetCode 701.二叉搜索树中的插入操作 题目讲解 思路 LeetCode 450.删除二叉搜索树中的节点 题目讲解 ...
最新文章
- 数据结构与算法常用名词术语整理
- 第39次《中国互联网络发展状况统计报告》发布
- 初步学习Linux文件基本属性和Cygwin STATUS_ACCESS_VIOLATION 错误
- 【car】买车时保险的坑
- Web内核微信小程序框架实践
- Linux应用程序在内存中的地址布局
- Linux 下的Core Dump
- what's the difference between atime, ctime and mtime
- 评论家:亚马逊先于苹果达万亿美元市值
- mysql数据库备份还原表_MySQL数据库及表的备份与还原_MySQL
- Vector Packet Processor(VPP) - 层二层三转发图谱
- 7-4 sdut-运输计费问题 (10 分)python
- 计算机一级信息技术基础知识,计算机一级考试之信息技术基础.doc
- 2016.1.20 总结(for语句,选择语句和循环语句混合使用)
- JQuery之基本操作
- Meclipse乱码解决方案
- Qt 学习(四) —— qrc资源文件介绍与使用
- 大学计算机vb基础知识6,西华师范大学计算机VB试题及答案6
- JVM(十) - 性能调优
- 随机在数组中抽取两个数据
热门文章
- 一般绘CAD图用计算机配置,cad图形界限一般是多少
- 组合日期_为什么我的透视表没法按日期组合?
- 创建 demo.html,demo.html
- 芯片业巨震!英特尔拟90亿美元卖掉NAND闪存业务
- 使用负载均衡SLB时为何出现请求分布不均衡的现象
- 后端人员如何应对线上故障
- php图片生成缩略图_php实现根据url自动生成缩略图的方法
- python并列语句_Python基础_控制语句
- 技术中台构建思路及进展_半年中台实践思考:落地中台,贵在其神,活用其形...
- mysql relay log 配置_mysql relay log参数汇总