日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/7/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 解釋: 節點 47 的最近公共祖先是 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 解釋: 節點 7624 的最近公共祖先節點是 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。