forked from garvit-bhardwaj/Leetcode-Problems-Solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAmount of Time for Binary Tree to Be Infected.cpp
54 lines (51 loc) · 1.5 KB
/
Amount of Time for Binary Tree to Be Infected.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/**
* 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:
void create( TreeNode* root, map<int, vector<int>>&mp){
if(root->left)
{
mp[root->left->val].push_back(root->val);
mp[root->val].push_back(root->left->val);
create(root->left, mp);
}
if(root->right)
{
mp[root->right->val].push_back(root->val);
mp[root->val].push_back(root->right->val);
create(root->right, mp);
}
}
int amountOfTime(TreeNode* root, int start) {
map<int, vector<int>>mp;
create(root, mp);
queue<int>q;
q.push(start);
set<int>st;
int time=0;
st.insert(start);
while(q.size()){
int size= q.size();
time++;
while(size--){
int node=q.front();q.pop();
for(auto ch: mp[node]){
if(!st.count(ch)){
q.push(ch);
st.insert(ch);
}
}
}
}
return time-1;
}
};