前言
要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但这种人…万中无一
-------包租婆
一、层序遍历是什么?
二叉树的层序遍历,就是从左到右一层一层的去遍历二叉树。需要借助队列这种数据结构来实现,队列先进先出,符合一层一层遍历的逻辑。而用栈先进后出模拟深度优先遍历也就是递归的逻辑。
二、实现方法(leetcode 102题为例)
calss Solution{
public:
//对比遍历结果输出就知道为什么返回值是vector容器嵌套了
vector<vector<int>> levelOrder(TreeNode* root){
queue<TreeNode*> que;//定义一个队列存放遍历结点的地址
vector<vector<int>> res;//一个大vector数组[ ]
if(root!=NULL) que.push(root);
while(!que.empty()){
int size=que.size();
vec<int> vec;//一个小vector数组[]
//这里一定要使用固定大小size,因为que.size()是不断变化的。
for(int i=0;i<size;i++){
TreeNode* node=que.front();
que.pop();
vec.push_back(node->val);
if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
}
res.push_back(vec);//[[3],]
}
return res;
}
};
打怪升级1
class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int>> res;
queue<TreeNode*> que;
if(root!=nullptr) que.push(root);
while(!que.empty())//判断队列是否为空
{
int size=que.size();//不为空就计算一下队列元素的个数,便于确定将要入队元素个数
vector<int> vec;
for(int ii=0;ii<size;ii++)
{
TreeNode* node=que.front();//记录即将出队的元素地址
que.pop();//元素出队
vec.push_back(node->val);
if(node->left) que.push(node->left);
if(node->right) que