解题思路:
利用二叉树的前序遍历,使用队列先处理当前层节点,然后把下一层的节点入队,直到队列为空。
代码实现:
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root)
{
vector<vector<int>> ans;
if(root == nullptr)
{
return ans;
}
queue<TreeNode*> q;//辅助队列
q.push(root); //将根节点入队
while(!q.empty())// 队列不为空,处理当前层
{
int sz = q.size();//记录当前层的节点个数
vector<int> vv; //把当前层的数据保存起来
for(int i = 0 ; i < sz ;++i)
{
TreeNode* node = q.front(); //依次获取当前层的每一个节点
q.pop();
vv.push_back(node->val); //将节点的值存起来
//将下一层的数据保存到队列中
if(node->left) //当前节点的左孩子不为空,就把左孩子入队
q.push(node->left);
if(node->right) //当前节点的右孩子不为空,就把右孩子入队。
q.push(node->right);
}
ans.push_back(vv); //将这一层数据记录到结果集中。
}
return ans;
}
};