当前位置: 首页> 科技> 名企 > Leetcode每日刷题之102.二叉树的层序遍历

Leetcode每日刷题之102.二叉树的层序遍历

时间:2025/7/11 8:13:49来源:https://blog.csdn.net/2301_80689220/article/details/141942540 浏览次数:2次

1.题目解析

本题是关于二叉树的层序遍历,不过这里的难点是如何将每一层的数据存储在数组并将整体存储在一个二维数组中,具体的算法原理我们在下面给出

 

2.算法原理

关于将每层数据分别存储在不同数组中,我们可以定义一个levelSize变量来存储栈内数据个数,然后限制对vector容器中的插入次数,来达到每个vector容器都只保留每一层的数据即可,并且关于每一层数据的逐层入栈,我们可以在每一个根节点出栈时将该节点的左右子结点入栈,用来达到逐层入栈的效果,并且此时栈内数据就是每一层的数据个数,我们可以用这个数据的个数来限制插入次数

3.代码展示

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {//创建一个二维数组来存储每一层的信息vector<vector<int>> vv;//创建一个队列用来取出每一层数据queue<TreeNode*> q;int levelSize = 0;//控制层数//对根节点特殊处理if(root){q.push(root);levelSize = 1;}while(!q.empty()){vector<int> v;while(levelSize--){//进入该层树节点TreeNode* front = q.front();q.pop();v.push_back(front->val);//进入下一层树节点if(front->left){q.push(front->left);}if(front->right){q.push(front->right);}}//二维数组中存储每一层的数据vv.push_back(v);//此时栈内数据个数就是本层所有数据,直接取出即可//需要使用levelSize来保证完全取出levelSize = q.size();}return vv;}
};

 

关键字:Leetcode每日刷题之102.二叉树的层序遍历

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: