BM26 求二叉树的层序遍历
知识点树广度优先搜索(BFS)
描述
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]
]
数据范围:二叉树的节点数满足
示例1
输入:
{1,2}
复制返回值:
[[1],[2]]
复制
示例2
输入:
{1,2,3,4,#,#,5}
复制返回值:
[[1],[2,3],[4,5]]
题解
借助于队列可以很简单的实现层次访问。但是如何进行分层呢?答案是每次出队时先获取当前队列的大小n,然后从队列里面依次取出n个元素,这些元素则是同一层的所有元素从左到右排序的结果。实现如下:
struct TreeNode
{
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
std::vector<std::vector<int>> levelOrder(TreeNode *root)
{
std::queue<TreeNode *> q;
std::vector<std::vector<int>> v;
if (root == nullptr)
{
return v;
}
q.push(root);
while (!q.empty())
{
auto n = q.size();
std::vector<int> a;
while (n-- > 0)
{
auto node = q.front();
a.push_back(node->val);
q.pop();
if (node->left != nullptr)
{
q.push(node->left);
}
if (node->right != nullptr)
{
q.push(node->right);
}
}
v.push_back(a);
}
return v;
}