3715 · Lowest Common Ancestor VPRE
Algorithms
Medium
This topic is a pre-release topic. If you encounter any problems, please contact us via "Problem Correction", and we will upgrade your account to VIP as a thank you.
Description
Given a binary tree with a root node root and an array nodes of objects of class TreeNode, you need to find the Lowest Common Ancestor (LCA, Lowest Common Ancestor) of all nodes in nodes and return it.
Where all the nodes in nodes exist in that binary tree and all the nodes in the binary tree have different values from each other.
Only $39.9 for the "Twitter Comment System Project Practice" within a limited time of 7 days!
WeChat Notes Twitter for more information(WeChat ID jiuzhang15)
The number of nodes in the tree is in the range
[
1
,
1
0
4
]
[1,10
4
]
−
1
0
9
≤
�
�
�
�
�
�
�
�
.
�
�
�
≤
1
0
9
−10
9
≤TreeNode.val≤10
9
All TreeNode.val are unique
All nodes[i] are unique
All nodes[i] exist in the tree
Example
Example 1
Input
root = {3,5,1,6,2,0,8,#,#,7,4}
nodes = [4,7]
Output
2
Explanation
The lowest common ancestor of TreeNode(4) and TreeNode(7) is TreeNode(2)
Example 2
Input
root = {3,5,1,6,2,0,8,#,#,7,4}
nodes = [2]
Output
2
Explanation
The lowest common ancestor of a single node is the node itself
Example 3
Input
root = {3,5,1,6,2,0,8,#,#,7,4}
nodes = [7,2,6,4]
Output
5
Explanation
The lowest common ancestor of TreeNode(7)、TreeNode(2)、TreeNode(6) and TreeNode(4) is TreeNode(5)
Example 4
Input
root = {3,5,1,6,2,0,8,#,#,7,4}
nodes = [0,2,3,1,5,8,6,4,7]
Output
3
Explanation
nodes
contains all the nodes in the tree, and the lowest common ancestor of all the nodes in the tree is the root node
Tags
Related Problems
474
Lowest Common Ancestor II
Easy
578
Lowest Common Ancestor III
Medium
3715
Lowest Common Ancestor V
Medium
解法1:套用的labuladong的模板。
cpp
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root: The root node of a binary tree.
* @param nodes: An array of objects of class TreeNode.
* @return: The lowest common ancestor of nodes.
*/
TreeNode* lowestCommonAncestor(TreeNode *root, vector<TreeNode*> &nodes) {
if (!root) return NULL;
unordered_set<TreeNode *> nodeSet;
for (auto pNode : nodes) nodeSet.insert(pNode);
TreeNode *res = helper(root, nodeSet);
return res;
}
private:
TreeNode* helper(TreeNode *root, unordered_set<TreeNode *> &nodeSet) {
if (!root) return NULL;
if (nodeSet.find(root) != nodeSet.end()) return root;
TreeNode *left = NULL, *right = NULL;
left = helper(root->left, nodeSet);
right = helper(root->right, nodeSet);
if (left && right) return root;
return left ? left : right;
}
};