题目地址:
https://leetcode.com/problems/find-root-of-n-ary-tree/description/
给定一个 n n n个节点的多叉树的所有节点,求其树根节点。题目保证每个节点值不同。树节点定义为:
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val) {
val = _val;
}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
将所有孩子的值加入一个哈希表,那么不在哈希表里的节点就是树根。代码如下:
class Solution {
public:
Node *findRoot(vector<Node *> tree) {
unordered_set<int> st;
for (auto *tr : tree)
for (auto *child : tr->children) st.insert(child->val);
for (auto &tr : tree)
if (!st.count(tr->val)) return tr;
return nullptr;
}
};
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。