标题
链接:leetcode链接
思路分析
二叉树的单纯层序遍历还是很简单的,但是这个题,要求我们将返回值按层写到一个二维数组中,该如何实现呢?
单纯层序遍历使用队列就可以了,每次出队列的时候,进行输出,并将该元素的left和right入队列即可。
在这个题目中,问题在于,如何分辨队列中哪些元素在同一层。
这里有两个方法:
法一:(好想)
再来一个queue存每一个元素的层数。
法二:(好用)
经过观察,可以发现,每一次删完一层的元素之后,队列里面剩余的元素个数就是下一层的元素个数。
我们可以设置一个变量来记录每一层的元素个数。
解决完关键问题之后就比较简单了,套上一般层序遍历的代码来写即可。
注意:这个题目还比较坑,需要考虑空树,需要特判一下。
代码
queue<TreeNode*> q;
vector<vector<int>> vv;
if(root == nullptr) return vv;
int levelSize = 1;
q.push(root);
while(!q.empty())
{
levelSize = q.size();
vector<int> v;
while(levelSize--)
{
TreeNode* front = q.front();
v.push_back(front->val);
q.pop();
if(front->left) q.push(front->left);
if(front->right) q.push(front->right);
}
vv.push_back(v);
}
return vv;
}