阅前须知
这篇博客是关于二叉树的层序遍历详解,但是不涉及二叉树的基本定义及原理。
通过队列实现二叉树的层序遍历的各类题型,总结出来二叉树层序遍历的模板C++代码。
个人认为非常有价值
可以直接点击每一道题的题目,直达Leetcode。
参考代码随想客
Leetcode 102.二叉树的层序遍历
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root)
{
queue<TreeNode*> que;
vector<vector<int>> res;
if(root!=nullptr)
{
que.push(root);
}
while(!que.empty())
{
int size=que.size();
vector<int> temp; //每次都是新数组
for(int i=0;i<size;i++)
{
TreeNode* node=que.front(); //因为每一次都会pop()掉,所以一直保持横向移动
que.pop(); //pop()掉是为了同一层横向移动
temp.push_back(node->val);
if(node->left)
{
que.push(node->left);
}
if(node->right)
{
que.push(node->right);
}
}
res.push_back(temp);
}
return res;
}
};
Leetcode 107.二叉树的层序遍历Ⅱ
这道题和102相比,就多了最后一个reverse();
class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root)
{
queue<TreeNode*> que;
vector<vector<int>> res;
if(root!=nullptr)
{
que.push(root);
}
while(!que.empty())
{
vector<int> temp;
int size=que.size();
for(int i=0;i<size;i++)
{
TreeNode* node=que.front();
que.pop();
temp.push_back(node->val);
if(node->left)
{
que.push(node->left);
}
if(node->right)
{
que.push(node->right);
}
}
res.push_back(temp);
}
reverse(res.begin(),res.end());
return res;
}
};