-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path987.cpp
32 lines (30 loc) · 1019 Bytes
/
987.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
class Solution {
public:
unordered_map<int, unordered_map<int, set<int>>> nums;
vector<vector<int>> verticalTraversal(TreeNode *root) {
if (!root)
return {};
nums.clear();
Traverse(root, 0, 0);
vector<vector<int>> ret;
for (int i = -1000; i <= 1000; ++i) {
if (nums.find(i) != nums.end()) {
ret.push_back(vector<int>());
for (int j = 0; j <= 1000; ++j) {
if (nums[i].find(j) != nums[i].end())
ret.back().insert(end(ret.back()), begin(nums[i][j]), end(nums[i][j]));
}
}
}
return ret;
}
void Traverse(TreeNode *node, int i, int j) {
if (nums.find(i) == nums.end())
nums[i] = unordered_map<int, set<int>>();
nums[i][j].insert(node->val);
if (node->left)
Traverse(node->left, i - 1, j + 1);
if (node->right)
Traverse(node->right, i + 1, j + 1);
}
};