学习安排根据《代码随想录》leetcode102
二叉树递归没问题,但是迭代算法以及层序遍历一些写法还是很难理解。
参考答案后,对层序遍历做了一次总结。
思路:
1.想要输出vector<vector<int>>这种嵌套类型需要两步:第一步 将元素插入内部vector, 第二步将 内部 vector 插入外部 vector
2.临时存储数据 ——利用 FIFO
3.循环条件:queue不为空
/**
* 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>>v;
queue<TreeNode*>q;
if(root!=NULL) q.push(root);
while(!q.empty())
{
int size=q.size();//更新queue的大小
vector<int>vec;
for(int i=0;i<size();i++)//把删除操作放在循环里面,为了根据当前q的大小依次删除元素
{
TreeNode*newNode=s.front();
s.pop();//先删除队首
vec.push_back(newNode->val);//删除一个q中元素,内部vector 加入一个元素。结束后 删除的元素构成一个数组。
//当前队首元素的左右节点再次放进去,更新q
if(newNode->left)s.push(newNode->left);
if(newNode->right)s.push(newNode->right);
}
v.push_back(vec);
}
return v;
}
};