vector<vector<int>> vec; vec.push_back(vector<int>()); vec.back().push_back();
今天在刷leetcode题的时候见到如上三句代码,很有意思。
第一句创建了一个实体为vertor<int>的容器,可以理解为一个二维数组;
第二句话相当于分隔符了,往二维数组里插入空的vector<int>(),可以理解为分行,即二维数组的下一行;
第三句话则是在每一行里插入数据。
//层序遍历 class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { //创建返回数组 vector<vector<int>> ans; //创建队列 queue<TreeNode*> que; //若空 if(root == nullptr) return ans; //根节点压入队列 que.push(root); //若队列不为空,循环 while(!que.empty()){ //当前队列长度 int queLen = que.size(); ans.push_back(vector<int>()); //循环遍历当前层所有节点 for(int i = 0; i < queLen; ++i){ //选择节点 auto node = que.front(); //选择的当前节点弹出队列 que.pop(); //将选择的当前节点的值压入数组 ans.back().push_back(node->val); //寻找当前节点的下一层节点压入队列 if(node->left) que.push(node->left); if(node->right) que.push(node->right); } } return ans; } };
以二叉树的层序遍历为例:
输入:[3,9,20,null,null,15,7]
输出:
[ [3], [9,20], [15,7] ]