一、题目
二、思路
层序遍历是二叉树中比较典型的一个算法,需要用到一个辅助队列(qu),思路是对二叉树的节点进行逐层处理。首先将头结点入队,头结点所在的层必定只有一个节点,每次求队列的长度得到的就是当前层二叉树节点的个数,然后逐个处理当前层结点(保存结点值,将其左右孩子结点入队(如果非空)),每处理完一个队头节点之后,就将其出队,这样就保证了处理完当前层后,队列中的所有结点都是下一层的结点,并且是按照从左到右的顺序排列,重复上述处理过程,直至队列为空。
三、代码
class Solution {
public:
vector<vector<int> > levelOrder(TreeNode* root) {
vector<vector<int>> ans;
queue<TreeNode*> qu;
qu.push(root);
while(!qu.empty()){
int len = qu.size(); //队列中的结点个数(也即当前层结点个数)
vector<int> curlayer;
for(int i=0; i<len; i++){ //处理当前层节点
TreeNode* tmp = qu.front();
curlayer.push_back(tmp->val);
if(tmp->left != NULL)
qu.push(tmp->left);
if(tmp->right != NULL)
qu.push(tmp->right);
qu.pop(); //每处理完一个节点就将其出队
}
ans.push_back(curlayer);
}
return ans;
}
};