LeCode:(102. 二叉树的层序遍历;107. 二叉树的层序遍历 II)
2024-01-08 10:03:22
题目1
本题与层序遍历不同的是,是一层一层的输出。
难点:如何一层一层的输出(需要知道每层的个数)
解题思路:
第一层只有一个结点,我们可以使用count计数,记录每层有几个结点,记录第二层有几个结点。然后根据第二层count计数,记录第三层有几个结点。直到遍历完。
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
//根入,遍历,count++
vector<vector<int>> outPut; //输出的总数组
vector<int> t; //每层的小数组
queue<TreeNode*> cur; //队列用来记录层序遍历的结点
int count = 1; //记录本层个数,第一层为1
if(root == nullptr) //树为空,直接返回大数组
{
return outPut;
}
cur.push(root); //先将根入队
while(!cur.empty()) //队列为空,遍历完毕
{
int k = count; //把本层个数给k,
count = 0; //count清0, 接着记录下一层
while(k--)
{
TreeNode* tem = cur.front();
cur.pop();
t.push_back(tem->val); //将值给小数组
if(tem->left)
{
count++;
cur.push(tem->left);
}
if(tem->right)
{
count++;
cur.push(tem->right);
}
}
outPut.push_back(t); //一层遍历完
t.clear(); //小数组清空
}
return outPut;
}
};
题目2
题目链接
以为会有新思路,结果官方答案把题目1,最后输出数组翻转了一下。
class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
//根入,遍历,count++
vector<vector<int>> outPut; //输出的总数组
vector<int> t; //每层的小数组
queue<TreeNode*> cur; //队列用来记录层序遍历的结点
int count = 1; //记录本层个数,第一层为1
if(root == nullptr) //树为空,直接返回大数组
{
return outPut;
}
cur.push(root); //先将根入队
while(!cur.empty()) //队列为空,遍历完毕
{
int k = count; //把本层个数给k,
count = 0; //count清0, 接着记录下一层
while(k--)
{
TreeNode* tem = cur.front();
cur.pop();
t.push_back(tem->val); //将值给小数组
if(tem->left)
{
count++;
cur.push(tem->left);
}
if(tem->right)
{
count++;
cur.push(tem->right);
}
}
outPut.push_back(t); //一层遍历完
t.clear(); //小数组清空
}
reverse(outPut.begin(),outPut.end());
return outPut;
}
};
文章来源:https://blog.csdn.net/weixin_45153969/article/details/135436225
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!