典型的BFS算法,由于需要逐层输出,则每层中间需要用一个空的树节点隔开,用以标识
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*>q;
vector<vector<int>>res;
vector<int>level;
TreeNode* a = nullptr;
if (!root)
return res;
q.push(root);
q.push(a);
while (!q.empty())
{
TreeNode* now = q.front();
q.pop();
//代表一层遍历结束,在队列尾加NULL,并将这一层的遍历结果压入数组
if (!now)
{
res.push_back(level);
level.resize(0);
// 只剩下null的时候,不需要再压入
if(!q.empty())
q.push(a);
}
else {
level.push_back(now->val);
if(now->left)
q.push(now->left);
if(now->right)
q.push(now->right);
}
}
return res;
}
};