最近公共祖先_leetcode No.236 二叉树的最近公共祖先
承接二叉搜索树的最近公共祖先。
题目链接:
二叉树的最近公共祖先 - 力扣(LeetCode)leetcode-cn.com
题目描述:
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]
示例 1:
输入: 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。因为根据定义最近公共祖先节点可以为节点本身。
说明:
- 所有节点的值都是唯一的。
- p、q 为不同节点且均存在于给定的二叉树中。
解题思路:
在二叉搜索树的最近公共祖先一题中,树是一个二叉搜索树,我们可以很容易知道应该往哪个方向去找节点的位置。但是本题就是一棵普通的数,应该怎么来求解呢?
我们肯定还是要先找到两个节点的位置,再去判断他俩的祖先,用 DFS 就可以了,那具体应该怎么做呢?
我们先看 p, q 是不是根节点,如果是根节点就是最近公共祖先,我们就返回根节点。如果不是,我们分别在左、右子树中查找是否包含 p 或 q,有两种情况:左子树包含 p,右子树包含q;左子树包含 q,右子树包含 p),那么此时的根节点还是最近公共祖先。
而如果左子树包含 p 和 q(往右找的返回值为空),那么到 root->left 中查找,最近公共祖先在左子树里面。
如果右子树包含 p 和 q(往左找的返回值为空),那么到 root->right 中查找,最近公共祖先在右子树里面。
代码如下:
class Solution {public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (!root || root==p || root==q) {return root;}TreeNode* left = lowestCommonAncestor(root->left, p, q);TreeNode* right = lowestCommonAncestor(root->right, p, q);if(!left) return right;if(!right) return left;return root;}
};
如果有任何疑问,欢迎提出。如果有更好的解法,也欢迎告知。
最近公共祖先_leetcode No.236 二叉树的最近公共祖先相关推荐
- 最近公共祖先_[LeetCode] 236. 二叉树的最近公共祖先
题目链接: https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree 难度:中等 通过率:57.2% 题目描述: ...
- 【LeetCode】【HOT】236. 二叉树的最近公共祖先(递归)
[LeetCode][HOT]236. 二叉树的最近公共祖先 文章目录 [LeetCode][HOT]236. 二叉树的最近公共祖先 package hot;class TreeNode{int va ...
- 力扣(LeetCode)236. 二叉树的最近公共祖先(C语言)
一.环境说明 本文是 LeetCode 236. 二叉树的最近公共祖先,使用c语言实现. 递归. 测试环境:Visual Studio 2019. 二.代码展示 精简代码: struct TreeNo ...
- Suzy找到实习了吗 Day 21 | 二叉树进行中:530. 二叉搜索树的最小绝对差,501. 二叉搜索树中的众数,236. 二叉树的最近公共祖先
530. 二叉搜索树的最小绝对差 题目 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 .差值是一个正数,其数值等于两值之差的绝对值. solution # Defi ...
- LeetCode二叉树系列——236.二叉树的最近公共祖先
一.题目描述: 236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表 ...
- LeetCode 236. 二叉树的最近公共祖先
文章目录 解法1:保存祖先节点+逐个判断 解法2:深度优先遍历 解法3:记录祖先节点 https://leetcode-cn.com/problems/lowest-common-ancestor-o ...
- leetcode 236. 二叉树的最近公共祖先 递归解法 c语言
如题: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x, 满足 x 是 p.q ...
- 最近公共祖先_LeetCode 236. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q 的祖先且 ...
- [leetcode]236.二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x 是 p.q 的祖先且 ...
最新文章
- ECCV 2020 DETR:《End-to-End Object Detection with Transformers》论文笔记
- 2020\Simulation_2\1.12.5MB
- 在ASP.NET Core 2.0中使用CookieAuthentication
- k8s高可用集群_搭建高可用集群(初始化和部署keepalived)---K8S_Google工作笔记0055
- 图层重命名快捷键_玩转CAD快捷键(大全),一篇文章就够了
- mysql年龄数据类型_MySql 数据类型
- android桌面工具,不一样的Android桌面小工具
- PEER地震库地震波获取方法
- web打印POS小票机代码
- 解决redhat vmware安装后鼠标不能使用问题
- PTA 数据库 mysql 10-198 C1-2新增订单统计信息
- Shopee开店首站有哪些站点?虾皮入驻规则
- 这家机场扶梯安装“智能管家”,扶梯消毒仪现高招,绝了!
- ICESat2学习笔记5 :ICESat-2数据下载
- Tesseract OCR简介(三)--安装及参数使用
- 小区出入登记记录系统java_一种小区出入管理系统的制作方法
- (27)Verilog实现倍频【方法四】
- 注入——sql注入命令
- JAVA中接口存在的意义
- 信息安全(网络安全顶会)