Problem: 987. 二叉树的垂序遍历
思路
很明显这是一个关于二叉树的遍历题目,我们只需要在遍历的时候记录好坐标即可,后续再添加一个自定义排序。
Code
class Solution {
public:
vector<vector<int>> res;
map<int, vector<pair<int, int>>> h;
vector<vector<int>> verticalTraversal(TreeNode* root) {
dfs(root, 0, 0);
for(auto item : h){
sort(item.second.begin(), item.second.end(),[](pair<int, int> &a, pair<int, int> &b) -> bool{
if(a.second == b.second) return b.first > a.first;
return b.second > a.second;
});
vector<int> t;
for(auto x : item.second) t.emplace_back(x.first);
res.emplace_back(t);
}
return res;
}
void dfs(TreeNode* node, int row, int col){
if(!node) return ;
h[col].emplace_back(pair(node->val, row));
dfs(node->left, row+1, col-1);
dfs(node->right, row+1, col+1);
}
};