思路:
使用一个辅助队列来层序遍历二叉树,不同的是需要使用一个二维数组来存放每个节点,而每一层的所有节点又需要是一个一维数组。
而最重要的问题是怎么拿到每一层的节点个数。ps:
当队列为空的时候,说明没有节点继续遍历了。
代码:
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ans;
queue<TreeNode*> q;
// 若根节点存在入队列
if (root) {
q.push(root);
}
// 循环判断队列
while (!q.empty()) {
int level_size = q.size(); // 获取当前层的节点个数
vector<int> v;
for (size_t i = 0; i < level_size; i++) {
TreeNode* front = q.front();
v.push_back(front->val);
// 迭代
if (front->left) {
q.push(front->left);
}
if(front->right) {
q.push(front->right);
}
q.pop(); // 出栈
}
ans.push_back(v);
}
return ans;
}
}
⭐️ leetcode链接:二叉树的层序遍历II
思路:
还是正常的层序遍历二叉树,最后只需要把二维数组逆置即可。
reverse(ans.begin() , ans.end());