LeetCode 1676. 二叉树的最近公共祖先 IV
文章目录
- 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相关推荐
- 力扣(LeetCode)236. 二叉树的最近公共祖先(C语言)
一.环境说明 本文是 LeetCode 236. 二叉树的最近公共祖先,使用c语言实现. 递归. 测试环境:Visual Studio 2019. 二.代码展示 精简代码: struct TreeNo ...
- leetcode 236. 二叉树的最近公共祖先 递归解法 c语言
如题: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x, 满足 x 是 p.q ...
- LeetCode 236. 二叉树的最近公共祖先
文章目录 解法1:保存祖先节点+逐个判断 解法2:深度优先遍历 解法3:记录祖先节点 https://leetcode-cn.com/problems/lowest-common-ancestor-o ...
- 最近公共祖先_[LeetCode] 236. 二叉树的最近公共祖先
题目链接: https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree 难度:中等 通过率:57.2% 题目描述: ...
- LeetCode 1650. 二叉树的最近公共祖先 III(哈希)
文章目录 1. 题目 2. 解题 1. 题目 给定一棵二叉树中的两个节点 p 和 q,返回它们的最近公共祖先节点(LCA). 每个节点都包含其父节点的引用(指针).Node 的定义如下: class ...
- LeetCode 1644. 二叉树的最近公共祖先 II
文章目录 1. 题目 2. 解题 1. 题目 给定一棵二叉树的根节点 root,返回给定节点 p 和 q 的最近公共祖先(LCA)节点. 如果 p 或 q 之一不存在于该二叉树中,返回 null. 树 ...
- leetcode 236. 二叉树的最近公共祖先LCA(后序遍历,回溯)
LCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先. 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科 ...
- Leetcode 236.二叉树的最近公共祖先
Time: 20190907 Type: Medium 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p. ...
- [leetcode]236.二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x 是 p.q 的祖先且 ...
最新文章
- tensorflow学习笔记(二十五):ConfigProtoGPU
- jQuery 2.0.3 源码分析core - 整体架构
- python基础-------迭代器,生成器,协程函数
- Android 本地css引用
- [凯立德]2014春季版3121J0H+3121D0H
- 安装mysql删除_mysql安装和删除
- LINUX CP 命令强制覆盖功能开启/关闭
- 工具类集和_gblfy版本
- Qt4_派生对话框类
- Python中使用static、class、abstract方法
- ip命令手册: 使用iproute2工具进行路由表管理和路由策略管理
- Docker学习总结之docker入门(转自:Vikings翻译)
- Linux acpi off报告ACPI bug处理方法
- html css手机端响应式登录页面
- C语言输出9 * 9口诀。
- 联想笔记本电脑连不上wifi,网络适配器显示黄色感叹号,错误代码56
- 幅频特性曲线matlab,幅频特性曲线的matlab模拟
- 【OpenCV C++】照片换底
- ie浏览器 “嗯...无法访问页面 尝试此操作...”的解决办法
- 7-2 单词首字母大写 (15 分)
热门文章
- java 年计算_java实现计算某年某月的天数
- mysql中如何把两个查询结果列数不同并成一张表_MySQL
- Django中模型类 属性-学习笔记
- C++中static关键字作用总结
- C++多态相关关问题及虚表剖析
- PHP配置环境中开启GD库
- 读书笔记:Information Architecture for the World Wide Web, 3rd Edition 北极熊 第一部分 1-3...
- jquery hover事件中 fadeIn和fadeOut 效果不能及时停止
- FC网络学习笔记02 -网络配置方法
- UltraEdit中显示空格与回车的问题