力扣链接:102. 二叉树的层序遍历 - 力扣(LeetCode) (leetcode-cn.com)
写法1:BFS写法(通过队列辅助实现)
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*>q;
if(root) q.push(root);
vector<vector<int>>res;
while(!q.empty()){
int size = q.size();//用常量size记录当前的队列中的结点数量
vector<int>tmp;
for(int i=0;i<size;i++)
{
TreeNode* k = q.front();
tmp.push_back(k->val);
q.pop();
if(k->left)
{
q.push(k->left);
}
if(k->right)
{
q.push(k->right);
}
}
res.push_back(tmp);//同时压入这一层结点的所有左右结点,我一开始也没看懂那个输出...
}
return res;
}
};
写法2:递归写法(DFS写法)
class Solution {
public:
vector<vector<int>>res;
vector<vector<int>> levelOrder(TreeNode* root) {
if(!root) return {};//空树返回空
levelTraversal(root,0);
return res;
}
void levelTraversal(TreeNode* root,int layer)
{
if(root)
{
if(res.size() == layer)//如果res中这一层还没有开辟vector存储空间,那么就进行开辟
{
res.push_back(vector<int>());
}
res[layer].push_back(root->val);//将结点值存入对应层的结果数组
}
if(root->left)
{
levelTraversal(root->left,layer + 1);
}
if(root->right)
{
levelTraversal(root->right,layer + 1);
}
}
};