LeetCode 1676. 二叉树的最近公共祖先 IV
文章目錄
- 1. 題目
- 2. 解題
1. 題目
給定一棵二叉樹的根節(jié)點 root 和 TreeNode 類對象的數(shù)組(列表) nodes,返回 nodes 中所有節(jié)點的最近公共祖先(LCA)。
數(shù)組(列表)中所有節(jié)點都存在于該二叉樹中,且二叉樹中所有節(jié)點的值都是互不相同的。
我們擴展二叉樹的最近公共祖先節(jié)點在維基百科上的定義:“對于任意合理的 i 值, n 個節(jié)點 p1 、 p2、…、 pn 在二叉樹 T 中的最近公共祖先節(jié)點是后代中包含所有節(jié)點 pi 的最深節(jié)點(我們允許一個節(jié)點是其自身的后代)”。
一個節(jié)點 x 的后代節(jié)點是節(jié)點 x 到某一葉節(jié)點間的路徑中的節(jié)點 y。
示例 1:
示例 2:
示例 3:
示例 4:
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree-iv
著作權歸領扣網(wǎng)絡所有。商業(yè)轉載請聯(lián)系官方授權,非商業(yè)轉載請注明出處。
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的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 2197. 替换数组中
- 下一篇: LeetCode 2104. 子数组范围