struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
vector<vector<int>> levelOrder(TreeNode *root){
vector<vector<int>> ans;
queue<TreeNode *> Q;
if (root) {
Q.push(root);
}
while (!Q.empty()) {
//获取队列长度 层数
size_t size = Q.size();
//填充每层元素的数组
vector<int> temp;
//开始遍历
while (size) {
//获取到头部节点
auto cur = Q.front();
//弹出节点
Q.pop();
//填充当前节点值
temp.push_back(cur->val);
//填充左节点
if (cur->left) {
Q.push(cur->left);
}
//填充右节点
if (cur->right) {
Q.push(cur->right);
}
//层级减少
size--;
}
//将每一层的值放入结果中
ans.push_back(temp);
}
return ans;
}
解法二:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ans;
// 生成当前层
vector<TreeNode*> cur;
// 注意加入的条件,不能把空指针放进去
if (root) {
cur.push_back(root);
}
vector<TreeNode*> nextLevel;
while (!cur.empty()) {
// 一定要记得把下一层清空
nextLevel.clear();
// 在结果层中新生成一层,ans.back()专门用来存放结果
ans.emplace_back();
for (auto c: cur) {
// 存放当前层的结果
ans.back().push_back(c->val);
// 专门用来存放下一层结果
if (c->left) {
nextLevel.push_back(c->left);
}
if (c->right) {
nextLevel.push_back(c->right);
}
}
// c++里面更迭的技巧
// 把下一层更迭为当前层。
cur.swap(nextLevel);
}
return ans;
}