二叉树的层序遍历
力扣
/**
*这道题的思路在于:
* 二叉树的层序遍历是: 根 左 右 一层一层往下遍历
* 我们需要借助一个辅助的数据结构——队列来实现这个目的
* 为什么呢?因为队列先入先出刚好符合我们 一层一层往下遍历的需求
* 所以的操作流程大概是: 根节点 询问根节点的左孩子 再询问根节点的右孩子
* 一层遍历完,接下来访问根节点左孩子的左孩子,再访问它的右孩子......
*
* 以此类推
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> que;
if(root != NULL) que.push(root);
vector<vector<int>> result;
while(!que.empty())
{
int size=que.size();//注意这里,因为队列的空间随着队列的pop和push会产生变化
vector<int> vec;
for(int i=0;i<size; i++)//所以这个size是会变大变小的
{
TreeNode* node=que.front();
que.pop();
vec.push_back(node->val);
if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
}
result.push_back(vec);
}
return result;
}
};