题目概述
解题思路
层次遍历二叉树,我们采用广度优先搜索,然后开两个计数器,分别记录当前层次的节点遍历的数目,以及下一层节点的数目即可。非递归的遍历使用queue实现。
方法性能
示例代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root)
{
vector<vector<int>> res;
if(root == NULL)
return res;
queue<TreeNode*> layer;
layer.push(root);
int cur_num = 1, nex_num = 0;
while(!layer.empty())
{
vector<int>cur_layer;
while(cur_num)
{
TreeNode* temp = layer.front();
layer.pop();
cur_num--;
cur_layer.push_back(temp->val);
if(temp->left)
{
nex_num++;
layer.push(temp->left);
}
if(temp->right)
{
nex_num++;
layer.push(temp->right);
}
}
cur_num = nex_num;
nex_num = 0;
res.push_back(cur_layer);
}
return res;
}
};