描述
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]
]
提示:
0 <= 二叉树的结点数 <= 1500
class Solution {
public:
vector<vector<int> > levelOrder(TreeNode* root) {
// write code here
vector<vector<int>> res;
if(root==nullptr)return res;
//创建队列
queue<TreeNode*> q;
//先插入根节点
q.push(root);
TreeNode* cur;
while(!q.empty())
{
//记录二叉树的每一行
vector<int> row;
int n=q.size();
//遍历每层节点,把值插入到row中
for(int i=0;i<n;i++)
{
cur=q.front();
q.pop();
row.push_back(cur->val);
//开始向q中插入当前层节点的孩子
if(cur->left!=nullptr)q.push(cur->left);
if(cur->right!=nullptr)q.push(cur->right);//这里用q.size()减少了很多工作量,少了一次循环
}
res.push_back(row);
}
return res;
}
};
总结:二叉树的层次遍历,使用队列辅助,每次队列插入它孩子的节点,用队列长度作为下次循环次数。
流程:先插入根节点到队列,作为第一次循环,清空当前队列到vector中,再插入当前元素集的左右孩子到队列中,统计队列大小,作为下次循环的次数。每层循环结束把vector插入到vector<vector>这个二维数组中。