题目描述:从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
此题是在层次遍历的基础上改动过来的,有需要的话,可以先看看我的上一篇题解:
https://blog.csdn.net/qq_54669536/article/details/123940163
题目解析:此遍历方式本质还是二叉树层次遍历,只是加了一个条件,将每一层分开输出。其实实现方式是很简单的,我们只需要在while循环内层再加一个循环,因为我们入队是一层一层入队的,当入完一层后,我们记录当前队列中的元素个数size,根据这个次数循环出队,等size减为0时,就说明这一层的节点已经打印完(注意,这里的size是在进入内部循环之前就确定的,之后的元素个数变化不会对这个size造成影响)。我们将将每一层出队的元素都存在一个单独的一维容器中,等内部循环结束之后,再将此容器1存放在二维容器中。
代码实现:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>>result;
queue<TreeNode*>qu;
if(root!=NULL)qu.push(root);
while(!qu.empty())
{
int size=qu.size();
vector<int>vec;
for(int i=0;i<size;++i)
{
TreeNode*node=qu.front();
qu.pop();
vec.push_back(node->val);
if(node->left!=NULL)qu.push(node->left);
if(node->right!=NULL)qu.push(node->right);
}
result.push_back(vec);
}
return result;