LeetCode102. 二叉树的层序遍历
题目描述
102. 二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。(即逐层地,从左到右访问所有节点)
样例
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
算法 广度优先搜索BFS
将树中每一层的元素都加入到队列中,每遍历一层就把下一层的节点加入到队列中。使用path存放当前一层的数值。
首先创建一个队列,将根节点插入队列中
- 遍历队列中的所有节点,按顺序依次将儿子加入新队列,并将当前节点的值记录在答案中
- 同时弹出上一层队列的节点
- 重复步骤1-2, 直到队列为空为止
时空分析
时间复杂度: 树中每个节点仅会进队出队一次,所以时间复杂度是 O(n)
C++ 代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
if (!root)
return res;
queue<TreeNode*> _Queue;
_Queue.push(root);
vector<int> path;
while(_Queue.size())
{
int size = _Queue.size();
for (int i = 0; i < size; i++)
{
TreeNode*node = _Queue.front();
path.push_back(node->val);
_Queue.pop();
if (node->left)
_Queue.push(node->left);
if (node->right)
_Queue.push(node->right);
}
res.push_back(path);
path.clear();
}
return res;
}
};