Skip to content

Commit 7f1f613

Browse files
authored
Create main.cpp
1 parent 7d76e27 commit 7f1f613

File tree

1 file changed

+91
-0
lines changed
  • 17 - Binary Tree Data Structure Problems/33 - Amount of Time for BInary Tree to Be Infected

1 file changed

+91
-0
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
8+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
9+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10+
* };
11+
*/
12+
class Solution {
13+
public:
14+
TreeNode* startPoint(TreeNode* root, int start, unordered_map<TreeNode*, TreeNode*> &childParentMapping){
15+
TreeNode* result = NULL;
16+
queue<TreeNode*> q;
17+
q.push(root);
18+
19+
childParentMapping[root] = NULL;
20+
21+
while(!q.empty()){
22+
TreeNode* front = q.front();
23+
q.pop();
24+
25+
if(front -> val == start){
26+
result = front;
27+
}
28+
29+
if(front -> left){
30+
childParentMapping[front -> left] = front;
31+
q.push(front -> left);
32+
}
33+
34+
if(front -> right){
35+
childParentMapping[front -> right] = front;
36+
q.push(front -> right);
37+
}
38+
}
39+
40+
return result;
41+
}
42+
43+
int t_infected_time(TreeNode* root, unordered_map<TreeNode*, TreeNode*> childParentMapping){
44+
int minutes = -1;
45+
46+
unordered_map<TreeNode*, bool> infected;
47+
queue<TreeNode*> q;
48+
49+
q.push(root);
50+
51+
infected[root] = true;
52+
53+
while(!q.empty()){
54+
int size = q.size();
55+
bool flag = true;
56+
57+
for(int i = 0; i < size; i++){
58+
59+
TreeNode* front = q.front();
60+
q.pop();
61+
62+
if(front -> left && !infected[front -> left]){
63+
flag = true;
64+
q.push(front -> left);
65+
infected[front -> left] = true;
66+
}
67+
68+
if(front -> right && !infected[front -> right]){
69+
flag = true;
70+
q.push(front -> right);
71+
infected[front -> right] = true;
72+
}
73+
74+
if(childParentMapping[front] && !infected[childParentMapping[front]]){
75+
flag = true;
76+
q.push(childParentMapping[front]);
77+
infected[childParentMapping[front]] = true;
78+
}
79+
}
80+
81+
if(flag == true) minutes++;
82+
}
83+
84+
return minutes;
85+
}
86+
int amountOfTime(TreeNode* root, int start) {
87+
unordered_map<TreeNode*, TreeNode*> childParentMapping;
88+
TreeNode* startNode = startPoint(root, start, childParentMapping);
89+
return t_infected_time(startNode, childParentMapping);
90+
}
91+
};

0 commit comments

Comments
 (0)