0%

二叉树的层序遍历

题目描述

给你一个二叉树,请您返回其按层序遍历得到的节点值(即逐层的,从左到右的访问所有节点)

输入输出样例

二叉树: [3,9,20,null,null,15,7],

1
2
3
4
5
  3
/ \
9 20
/ \
15 7

返回其层序遍历结果:

1
2
3
4
5
[
[3],
[9,20],
[15,7]
]

题解

层序遍历一个二叉树,就是从左到右一层一层的去遍历二叉树。我们需要借助一个辅助数据结构即队列来实现,队列的性质:先进先出。这也很符合一层一层遍历的逻辑,对应的栈则是适用于模拟深度优先遍历。
这个也是一个模板,遇到类似的可以直接套用它,对细节处再进行小小的修改。具体代码如下 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> res;
if (root != nullptr) res.push(root);
vector<vector<int>> ans;
while (!res.empty()) {
vector<int> vec;
int size = res.size();
for (int i = 0; i < size; i++) {
TreeNode* node = res.front();
res.pop();
vec.push_back(node->val);
if (node->left) res.push(node->left);
if (node->right) res.push(node->right);
}
ans.push_back(vec);
}
return ans;
}
};