思路:广度优先搜索BFS.
用一个队列q,用来存储二叉树的节点。首先将根节点放进去,然后利用while循环来判断什么时候结束。然后利用for循环一层一层的输出。之所以可以这样做,是因为for循环中提前获取了q的大小,此时q的大小就是每一层节点的大小,然后逐步递减,虽然q的大小一直在变化,但在执行for循环的之前,q的大小就是下一层二叉树节点的大小。
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
if(!root) return {};
vector<vector<int> > ans;
queue<TreeNode*> q;
q.push(root);
while(!q.empty())
{
vector<int> tmp;
for(int i=q.size();i>0;--i)
{
TreeNode* t=q.front();q.pop();
tmp.push_back(t->val);
if(t->left) q.push(t->left);
if(t->right) q.push(t->right);
}
ans.push_back(tmp);
}
return ans;
}
};