0
点赞
收藏
分享

微信扫一扫

[二叉树]BM26 求二叉树的层序遍历-中等

​​BM26 求二叉树的层序遍历​​

知识点​​树​​​​广度优先搜索(BFS)​​

描述

给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
[二叉树]BM26 求二叉树的层序遍历-中等_二叉树 
该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]

]


数据范围:二叉树的节点数满足 [二叉树]BM26 求二叉树的层序遍历-中等_队列_02


示例1

输入:

{1,2}

复制返回值:

[[1],[2]]

复制

示例2

输入:

{1,2,3,4,#,#,5}

复制返回值:

[[1],[2,3],[4,5]]

题解

借助于队列可以很简单的实现层次访问。但是如何进行分层呢?答案是每次出队时先获取当前队列的大小n,然后从队列里面依次取出n个元素,这些元素则是同一层的所有元素从左到右排序的结果。实现如下:

#include <bits/stdc++.h>

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;
}
举报

相关推荐

0 条评论