题目:
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int> > res;
if (NULL == root) return res;
queue<TreeNode *> q;//队列
q.push(root);//初始化队列
int numOfCurLevelElem = 1;//当前层的元素个数
int numOfNextLevelElem = 0;//下一层的元素个数
vector<int> oneLevel;//一层元素
while (!q.empty()){//注意循环结束条件
for (int i = 0; i < numOfCurLevelElem; ++i){//遍历一层
TreeNode *pCur = q.front();
q.pop();
oneLevel.push_back(pCur->val);//访问队头元素
if (pCur->left){//将左孩子放入队列
q.push(pCur->left);
++numOfNextLevelElem;
}
if (pCur->right){//将右孩子放入队列
q.push(pCur->right);
++numOfNextLevelElem;
}
}//一层遍历结束
res.push_back(oneLevel);//输出本层遍历结果
oneLevel.clear();//清空oneLevel,为下一层做准备
numOfCurLevelElem = numOfNextLevelElem;//更新numOfCurLevelElem,为下一层做准备
numOfNextLevelElem = 0;//更新numOfNextLevelElem,为下一层做准备
}
return res;
}
};