题目:102. 二叉树的层次遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 17
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
类似于二叉树的层次遍历II。具体实现稍有不同。
实现
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ans;
if (root == NULL) {
return ans;
}
pair<TreeNode*, int> levelNode;
queue<pair<TreeNode*, int>> nodeQueue;
levelNode = make_pair(root, 1);
nodeQueue.push(levelNode);
while (!nodeQueue.empty()) {
levelNode = nodeQueue.front();
nodeQueue.pop();
TreeNode* node = levelNode.first;
int level = levelNode.second;
vector<int> levelAns;
if (ans.size() < level) {
levelAns.clear();
levelAns.push_back(node->val);
ans.push_back(levelAns);
} else {
ans[level-1].push_back(node->val);
}
if (node->left != NULL) {
levelNode = make_pair(node->left, level + 1);
nodeQueue.push(levelNode);
}
if (node->right != NULL) {
levelNode = make_pair(node->right, level + 1);
nodeQueue.push(levelNode);
}
}
return ans;
}
};