文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给定一棵二叉树的根节点 root 和 TreeNode 类对象的数组(列表) nodes,返回 nodes 中所有节点的最近公共祖先(LCA)。
数组(列表)中所有节点都存在于该二叉树中,且二叉树中所有节点的值都是互不相同的。

我们扩展二叉树的最近公共祖先节点在维基百科上的定义:“对于任意合理的 i 值, n 个节点 p1 、 p2、…、 pn 在二叉树 T 中的最近公共祖先节点是后代中包含所有节点 pi 的最深节点(我们允许一个节点是其自身的后代)”。

一个节点 x 的后代节点是节点 x 到某一叶节点间的路径中的节点 y。

示例 1:

输入: root = [3,5,1,6,2,0,8,null,null,7,4], nodes = [4,7]
输出: 2
解释: 节点 4 和 7 的最近公共祖先是 2。

示例 2:

输入: root = [3,5,1,6,2,0,8,null,null,7,4], nodes = [1]
输出: 1
解释: 单个节点的最近公共祖先是该节点本身。

示例 3:

输入: root = [3,5,1,6,2,0,8,null,null,7,4], nodes = [7,6,2,4]
输出: 5
解释: 节点 7、6、2 和 4 的最近公共祖先节点是 5。

示例 4:

输入: root = [3,5,1,6,2,0,8,null,null,7,4], nodes = [0,1,2,3,4,5,6,7,8]
输出: 3
解释: 树中所有节点的最近公共祖先是根节点。提示:
树中节点个数的范围是 [1, 10^4] 。
-10^9 <= Node.val <= 10^9
所有的 Node.val 都是互不相同的。
所有的 nodes[i] 都存在于该树中。
所有的 nodes[i] 都是互不相同的。

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

2. 解题

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {public:TreeNode* lowestCommonAncestor(TreeNode* root, vector<TreeNode*> &nodes) {if(nodes.size()==1) return nodes[0];TreeNode* ans = lowestCommonAncestor(root, nodes[0], nodes[1]);for(int i = 2; i < nodes.size(); ++i)ans = lowestCommonAncestor(root, ans, nodes[i]);return ans;}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q){if(!root || p==root || q==root) return root;auto l = lowestCommonAncestor(root->left, p, q);auto r = lowestCommonAncestor(root->right, p, q);if(l&&r) return root;return l ? l : r;}
};
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {unordered_set<TreeNode*> s;
public:TreeNode* lowestCommonAncestor(TreeNode* root, vector<TreeNode*> &nodes) {for(auto n : nodes)s.insert(n);TreeNode* ans = NULL;for(auto n : nodes)ans = lowestCommonAncestor(root, ans, n);return ans;}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q){if(!root || p==root || q==root || s.count(root)) return root;auto l = lowestCommonAncestor(root->left, p, q);auto r = lowestCommonAncestor(root->right, p, q);if(l&&r) return root;return l ? l : r;}
};

68 ms 40.8 MB C++


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

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

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

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

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

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

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

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

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

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

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

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

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

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

    文章目录 1. 题目 2. 解题 1. 题目 给定一棵二叉树的根节点 root,返回给定节点 p 和 q 的最近公共祖先(LCA)节点. 如果 p 或 q 之一不存在于该二叉树中,返回 null. 树 ...

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

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

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

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

  9. [leetcode]236.二叉树的最近公共祖先

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

最新文章

  1. tensorflow学习笔记(二十五):ConfigProtoGPU
  2. jQuery 2.0.3 源码分析core - 整体架构
  3. python基础-------迭代器,生成器,协程函数
  4. Android 本地css引用
  5. [凯立德]2014春季版3121J0H+3121D0H
  6. 安装mysql删除_mysql安装和删除
  7. LINUX CP 命令强制覆盖功能开启/关闭
  8. 工具类集和_gblfy版本
  9. Qt4_派生对话框类
  10. Python中使用static、class、abstract方法
  11. ip命令手册: 使用iproute2工具进行路由表管理和路由策略管理
  12. Docker学习总结之docker入门(转自:Vikings翻译)
  13. Linux acpi off报告ACPI bug处理方法
  14. html css手机端响应式登录页面
  15. C语言输出9 * 9口诀。
  16. 联想笔记本电脑连不上wifi,网络适配器显示黄色感叹号,错误代码56
  17. 幅频特性曲线matlab,幅频特性曲线的matlab模拟
  18. 【OpenCV C++】照片换底
  19. ie浏览器 “嗯...无法访问页面 尝试此操作...”的解决办法
  20. 7-2 单词首字母大写 (15 分)

热门文章

  1. java 年计算_java实现计算某年某月的天数
  2. mysql中如何把两个查询结果列数不同并成一张表_MySQL
  3. Django中模型类 属性-学习笔记
  4. C++中static关键字作用总结
  5. C++多态相关关问题及虚表剖析
  6. PHP配置环境中开启GD库
  7. 读书笔记:Information Architecture for the World Wide Web, 3rd Edition 北极熊 第一部分 1-3...
  8. jquery hover事件中 fadeIn和fadeOut 效果不能及时停止
  9. FC网络学习笔记02 -网络配置方法
  10. UltraEdit中显示空格与回车的问题