层次遍历在很多地方都会有较好的效果,比如在查找二叉树深度的时候比普通的DFS快上了不少。
本题用队列存储每个节点,当节点出队列时令它的左右子节点依次进入队列,
如何处理打印每一行的问题?某一层进入队列中的数就是下一层要输出的数,依次迭代,比如队列:
一开始,根节点3进入队列,该层元素就有一个,第一层输出3 , 然后3出队列,左右孩子9,20入队;
第二层就有两个元素,会循环两次,依次输出9,20,并将他们的孩子(为空就不进入)15,7入队;
第三层也就两个元素,会循环两次,依次输出15,7,没有孩子入队;
此时队列为空,退出循环,结束。
代码如下:
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> a;
if(root == nullptr)
return a;
queue<TreeNode*>b;
TreeNode* cur = root;
b.push(cur);
int depth = 0 ,size;
while(!b.empty())
{
size = b.size();
depth++;
vector<int> d;
while(size--)
{
cur = b.front();
d.push_back(cur->val);
b.pop();
if(cur->left != nullptr)
{
b.push(cur->left);
}
if(cur->right != nullptr)
{
b.push(cur->right);
}
}
a.push_back(d);
}
return a;
}
};