文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给定一棵二叉树的根节点 root,返回给定节点 p 和 q 的最近公共祖先(LCA)节点。
如果 p 或 q 之一不存在于该二叉树中,返回 null。
树中的每个节点值都是互不相同的。

根据维基百科中对最近公共祖先节点的定义:“两个节点 p 和 q 在二叉树 T 中的最近公共祖先节点是后代节点中既包括 p 又包括 q 的最深节点(我们允许一个节点为自身的一个后代节点)”。
一个节点 x 的后代节点是节点 x 到某一叶节点间的路径中的节点 y。

示例 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。根据共同祖先节点的定义,一个节点可以是自身的后代节点。

示例 3:

输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 10
输出: null
解释: 节点 10 不存在于树中,所以返回 null。提示:
树中节点个数的范围是 [1, 104]。
-109 <= Node.val <= 109
所有节点的值 Node.val 是互不相同的。
p != q

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 跟之前的 236题 LCA 差不多,只是增加了判断 p, q 是否都存在于树中
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {bool findp = false, findq = false;
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {TreeNode* ans = lowestCommonAncestor1(root,p,q);if(findp && findq) return ans;return NULL;}TreeNode* lowestCommonAncestor1(TreeNode* root, TreeNode* p, TreeNode* q) {if(!root) return root;if(root==p) findp = true;else if(root==q) findq = true;auto l = lowestCommonAncestor1(root->left,p,q);auto r = lowestCommonAncestor1(root->right,p,q);if(root==p || root==q || (l && r))return root;return l ? l : r;}
};

116 ms 60.3 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1644. 二叉树的最近公共祖先 II相关推荐

  1. 1644 二叉树的最近公共祖先 II

    题目描述: 给定一棵二叉树的根节点 root,返回给定节点 p 和 q 的最近公共祖先(LCA)节点.如果 p 或 q 之一不存在于该二叉树中,返回 null.树中的每个节点值都是互不相同的. 根据维 ...

  2. 力扣(LeetCode)236. 二叉树的最近公共祖先(C语言)

    一.环境说明 本文是 LeetCode 236. 二叉树的最近公共祖先,使用c语言实现. 递归. 测试环境:Visual Studio 2019. 二.代码展示 精简代码: struct TreeNo ...

  3. LeetCode 1676. 二叉树的最近公共祖先 IV

    文章目录 1. 题目 2. 解题 1. 题目 给定一棵二叉树的根节点 root 和 TreeNode 类对象的数组(列表) nodes,返回 nodes 中所有节点的最近公共祖先(LCA). 数组(列 ...

  4. leetcode 236. 二叉树的最近公共祖先 递归解法 c语言

    如题: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x, 满足 x 是 p.q ...

  5. LeetCode 236. 二叉树的最近公共祖先

    文章目录 解法1:保存祖先节点+逐个判断 解法2:深度优先遍历 解法3:记录祖先节点 https://leetcode-cn.com/problems/lowest-common-ancestor-o ...

  6. 最近公共祖先_[LeetCode] 236. 二叉树的最近公共祖先

    题目链接: https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree 难度:中等 通过率:57.2% 题目描述: ...

  7. LeetCode 1650. 二叉树的最近公共祖先 III(哈希)

    文章目录 1. 题目 2. 解题 1. 题目 给定一棵二叉树中的两个节点 p 和 q,返回它们的最近公共祖先节点(LCA). 每个节点都包含其父节点的引用(指针).Node 的定义如下: class ...

  8. leetcode 236. 二叉树的最近公共祖先LCA(后序遍历,回溯)

    LCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先. 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科 ...

  9. Leetcode 236.二叉树的最近公共祖先

    Time: 20190907 Type: Medium 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p. ...

最新文章

  1. 科技垄断正在朝着纵向发展
  2. python中的有序字典
  3. HarmonyOS之数据管理·分布式数据服务的应用
  4. python实现矢量分级渲染_OpenLayer3实现分级渲染(初级版本)
  5. Google Optimization Tools介绍
  6. mininet 应用实践
  7. 卢伟冰正式预告Redmi K30:首发双开孔全面屏+双模5G
  8. 一步步实现SDDC--多角色服务器部署
  9. Struts2接受页面传值过程中出现input的问题
  10. mysql 账户管理_MySql 账户管理
  11. java 毕向东 笔记_毕向东Java基础部分笔记
  12. 测绘技能大赛选手图加密工具
  13. STM32F7 硬件IIC驱动
  14. Ceph 命令 pool image 纠删
  15. 查看UiPath许可证状态
  16. 详细过程MD5加密的原理+java实现
  17. cmd命令导入.dmp文件
  18. 使用脚本更改计算机名
  19. python 脚本梦幻西游_GitHub - U200915104/mhxy_fz: 一个基于计算机视觉开发的梦幻西游辅助脚本...
  20. 笨鸟的生活(小白的学习日常)

热门文章

  1. bodhi linux 安装 ubuntu软件,Bodhi Linux 5.1.0 发布,基于Ubuntu的轻量级发行版
  2. Vue.js前后端分离2
  3. 解决 :sudo:/etc/sudoers 可被任何人写
  4. 机器学习之朴素贝叶斯算法的推理及相关知识总结
  5. python 对象序列化 pickling_python操作文件——序列化pickling和JSON
  6. c++远征之多态篇——异常处理
  7. long 转为string_面试必问 Redis数据结构底层原理String、List篇
  8. STATS 4014 Advanced Data Science
  9. CentOS 7.3 系统安装配置图解教程
  10. SpringBoot(十) :邮件服务