题解 | #printf的返回值#
求二叉树的层序遍历
http://www.nowcoder.com/practice/04a5560e43e24e9db4595865dc9c63a3
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型vector<vector<>>
*/
// vector<vector<int> > levelOrder(TreeNode* root) {
// vector<vector<int>> s={}; //初始为空
// queue<TreeNode *> t; //模拟队列
// int front=-1,rear=-1; //追踪层数
// int last=0; //一直等于最右边结点的位置
// if(root == NULL)
// return s;
// else
// {
// vector<int> x{};
// t.push(root);
// rear++;
// while(front < rear)
// {
// root=t.front(); //两条语句,出队列结点到root中
// t.pop(); //出队列
// front++;
// //emplace_bace方法代替push_back方法,减少拷贝创建类
// x.emplace_back(root->val); //将结点数据保存在相应层次的vecto中
// if(root->left)
// {
// t.push(root->left);
// rear++;
// }
// if(root->right)
// {
// t.push(root->right);
// rear++;
// }
// if(front == last) //访问到每层的最右边节点了,代表层增加了
// {
// s.emplace_back(x); //保存每层的结点值
// x.clear(); //清空x
// last=rear;
// }
// }
// return s;
// }
// }
vector<vector<int> > levelOrder(TreeNode* root) {
// write code here
queue<TreeNode*> que;
vector<vector<int>> res;
if(root != nullptr) que.push(root);
while(!que.empty()){
int size = que.size();
vector<int> tmp;
for(int i = 0; i < size; i++){ //把每层的访问完
TreeNode* node = que.front();
que.pop();
tmp.emplace_back(node->val); //追加到末尾
if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
}
res.emplace_back(tmp);
}
return res;
}
};