庞各庄网站建设公司想做游戏推广怎么找游戏公司
给你一个二叉树的根结点,返回其结点按 垂直方向(从上到下,逐列)遍历的结果。
如果两个结点在同一行和列,那么顺序则为 从左到右。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[9],[3,15],[20],[7]]
示例 2:
输入:root = [3,9,8,4,0,1,7]
输出:[[4],[9],[3,0,1],[8],[7]]
示例 3:
输入:root = [3,9,8,4,0,1,7,null,null,null,2,5]
输出:[[4],[9,5],[3,0,1],[8,2],[7]]
提示:
树中结点的数目在范围 [0, 100] 内
-100 <= Node.val <= 100
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/binary-tree-vertical-order-traversal
方法一:层序遍历
C++提交内容:
/*** 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:vector<vector<int>> verticalOrder(TreeNode* root) {vector<vector<int>> ans;if (!root) return ans;map<int, vector<int>> m;queue<pair<TreeNode*, int>> q;q.push({root, 0});while (!q.empty()) {int size = q.size();for (int i = 0; i < size; ++i) {auto p = q.front();q.pop();TreeNode* node = p.first;int row = p.second;m[row].push_back(node->val);if (node->left) q.push({node->left, row - 1});if (node->right) q.push({node->right, row + 1});}}map<int, vector<int>>::iterator iter;for (iter = m.begin(); iter != m.end(); iter++) {ans.push_back(iter->second);}return ans;}
};