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] ]
树的层序遍历,使用队列来实现。不一样的地方就是需要以层为单位进行输出,我这里使用两个整型遍历levelNodeNum1和levelNodeNum2分别记录当前层和下一层节点的个数,levelNodeNum1初始化当然为1,表示根节点个数为 1,接下来在遍历当前层的过程通过levelNodeNum2记录加入队列的下一层的节点个数,当前层遍历完成后,将levelNodeNum2值赋给levelNodeNum1,一直重复以上操作直到队列为空即可,更具体的步骤见代码。
my accepted answer in C++:
class Solution {
public:
vector<vector<int> > levelOrder(TreeNode *root)
{
vector<vector<int>> vvi;
vector<int> vi;
int levelNodeNum1 = 1; //当前层的节点个数
int levelNodeNum2 = 0; //下一层的节点个数
if (root == NULL) return vvi;
queue<TreeNode*> qt;
qt.push(root);
while (!qt.empty())
{
while (levelNodeNum1 > 0) //遍历当前层节点,同时将下一层节点入队并记录个数
{
root = qt.front();
vi.push_back(root->val);
qt.pop();
levelNodeNum1--;
if (root->left != NULL)
{
qt.push(root->left);
levelNodeNum2++;
}
if (root->right != NULL)
{
qt.push(root->right);
levelNodeNum2++;
}
}
vvi.push_back(vi);
vi.clear();
levelNodeNum1 = levelNodeNum2;
levelNodeNum2 = 0;
}
return vvi;
}
};