二叉树的层序遍历
BFS经典的应用,值得记录下来。
首先将根结点压入队列,只要队列非空就进行循环:
为了按照层序输出结点,我们将当前队列长度取出,然后进行循环,这样做的目的是每次进行for循环都是将当前层取出,然后将当前层所有的儿子结点(下一层)压入队列。
循环时取出值并弹出元素,当队列为空时即遍历完毕。
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
if(!root) return {};
vector<vector<int>> ret;
queue<TreeNode*> q;
q.push(root);
while(!q.empty())
{
int size=q.size();
ret.push_back(vector<int >());
for(int i=1;i<=size;i++)
{
auto node=q.front();
q.pop();
ret.back().push_back(node->val);
if(node->left) q.push(node->left);
if(node->right) q.push(node->right);
}
}
return ret;
}
};