本文主要是介绍Leetcode每日刷题之102.二叉树的层序遍历,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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.二叉树的层序遍历的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!