这个题用广搜即可
可以通过a,b,i三个变量来判断是否读完了一层
a是当前读的层有多少个节点,初始值为1,就是根节点
b是接下来的一层有多少个节点,初始值为0
i是目前读了这一层多少节点,初始值为0
每读一个节点i++
,当节点的子节点不是空时、入队b++
、并把子节点的值放入临时vector中, 当i == a
时表示当前层结束
把临时vector中的数据放入总vector并把a,b,i重新赋值
a = b; //这一层有b个节点
b = 0; //下一层节点数暂时为0
i = 0; //这一层已经读了0个节点
if(a > 0) //当下一层不是空时才加入总vector,防止最终加入一个[]。即空的vector
v.push_back(v0);
v0.clear();
完整代码如下:
/**
* 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) {
queue<TreeNode*> q;
q.push(root);
vector<vector<int>> v; //存放最终结果
if(root == NULL) return v;
vector<int> v0; //存放马上放入v中的东西
v0.push_back(root->val);
v.push_back(v0);
v0.clear();
int a = 1;
int b = 0;
int i = 0;
while(q.empty() == false){
i++;
TreeNode *t = q.front();
q.pop();
TreeNode *l = t->left;
TreeNode *r = t->right;
if(l != NULL){
q.push(l);
b++;
v0.push_back(l->val);
}
if(r != NULL){
q.push(r);
b++;
v0.push_back(r->val);
}
if(i == a){ //说明一层结束了
a = b;
b = 0;
i = 0;
if(a > 0)
v.push_back(v0);
v0.clear();
}
}
return v;
}
};