给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层序遍历结果:
[
[3],
[9,20],
[15,7]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal
注意:如何实现逐层遍历?每层的值如何存储?
/**
* 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>> result;
//如果为NULL
if(!root)return result;
//初始化队列
queue<TreeNode*>q;
//根节点入队列
q.push(root);
//队列非空
while(!q.empty()){
//取当前一层的size
int currentSize=q.size();
//加入当前一层vector
result.push_back(vector<int>());
//对当前一层的所有节点进行处理
for(int i=1;i<=currentSize;i++)
{
//取一个节点处理
auto node=q.front();
//将当前节点从队列删除
q.pop();
//存储当前节点的值
result.back().push_back(node->val);
//左节点入队列
if(node->left)q.push(node->left);
//右节点入队列
if(node->right)q.push(node->right);
}
}
//返回结果集
return result;
}
};