Binary Tree Vertical Order Traversal
https://www.lintcode.com/problem/binary-tree-vertical-order-traversal/description
Last updated
https://www.lintcode.com/problem/binary-tree-vertical-order-traversal/description
Last updated
/**
* 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 of tree
* @return: the vertical order traversal
*/
vector<vector<int>> verticalOrder(TreeNode * root) {
if (root == nullptr) return vector<vector<int>>();
queue<pair<TreeNode*, int>> q;
q.push({root, 0});
unordered_map<int, vector<int>> m;
int mi = 0, mx = 0;
while (!q.empty()) {
const auto t = q.front();
q.pop();
m[t.second].push_back(t.first->val);
mi = min(mi, t.second);
mx = max(mx, t.second);
if (t.first->left != nullptr) q.push({t.first->left, t.second - 1});
if (t.first->right != nullptr) q.push({t.first->right, t.second + 1});
}
vector<vector<int>> res;
for (int i = mi; i <= mx; ++i) {
res.push_back(m[i]);
}
return res;
}
};