力扣987——二叉树的垂序遍历
虽然是困难,但并不复杂;
遍历二叉树,获得每个点的行列和值,然后按规则排序即可;
可以用map自动升序处理每个列;
对每列按规则排序后输出答案;
/*** 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:map<int, vector<pair<int, int>>> arr;void dfs(TreeNode* root, int hang, int lie) {arr[lie].push_back({hang, root->val});if(root->left) dfs(root->left, hang + 1, lie - 1);if(root->right) dfs(root->right, hang + 1, lie + 1);}vector<vector<int>> verticalTraversal(TreeNode* root) {dfs(root, 0, 0);vector<vector<int>> ans;for(auto& [_, now] : arr) {sort(now.begin(), now.end());vector<int> tmp;for(auto a : now) tmp.push_back(a.second);ans.push_back(tmp);}return ans;}};
