给你二叉树的根节点 root ,返回其节点值的 层序遍历 。(即逐层地,从左到右访问所有节点)。
示例题解 1. 队列 层序遍历 BFS
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
遍历过程中,严格按照一层一层,从左往右进行访问。
class Solution {
public:
vector> levelOrder(TreeNode* root) {
vector> ans;
if(root == nullptr) return ans;
queue que;
TreeNode* curr = root;
que.push(curr);
while(!que.empty()){
int size = que.size(); // 每层个数就是队列元素个数
vector sub;
for(int i = 0; i < size; ++i){
curr = que.front();
que.pop();
sub.emplace_back(curr->val);
if(curr->left) que.push(curr->left);
if(curr->right) que.push(curr->right);
}
ans.emplace_back(sub);
}
return ans;
}
};
2. DFS 递归
遍历过程中不按照严格层序进行遍历。
class Solution {
public:
vector> ans;
void traversal(TreeNode* node, int depth){
if(node == nullptr) return;
if(depth == ans.size()) ans.emplace_back(); // 当前节点层数大于数组长度时,扩容
ans[depth].emplace_back(node->val);
traversal(node->left, depth+1);
traversal(node->right, depth+1);
}
vector> levelOrder(TreeNode* root) {
traversal(root, 0); // 根节点为第0层
return ans;
}
};



