📅  最后修改于: 2023-12-03 15:10:41.890000             🧑  作者: Mango
BFS是一种常用的图遍历算法,它从一个源节点开始遍历,逐层地遍历它的相邻节点。本题的目标是确定来自源节点的树中每个节点的级别。
树是一种具有层次关系的非线性数据结构,它由一个根节点和若干子树组成。在本题中,我们假设源节点是根节点,每个节点包含一个值和指向它的所有子节点的指针。我们需要确定每个节点在树中的层数(即级别),其中根节点的层数为0,它的子节点的层数为1,依此类推。
我们可以使用BFS算法来确定每个节点的级别。具体的算法思路如下:
下面是用示例代码实现BFS的过程:
struct TreeNode {
int val;
vector<TreeNode*> children;
TreeNode(int x) : val(x) {}
};
vector<int> getLevelOrder(TreeNode* root) {
vector<int> levels;
if (root == nullptr) {
return levels;
}
queue<pair<TreeNode*, int>> q;
q.push({root, 0});
while (!q.empty()) {
auto node = q.front().first;
int level = q.front().second;
q.pop();
levels.push_back(level);
for (auto child : node->children) {
q.push({child, level + 1});
}
}
return levels;
}
BFS算法的时间复杂度为O(n),其中n是树中节点的个数。因为每个节点只会被遍历一次,所以时间复杂度为线性的。
空间复杂度取决于队列的大小,最坏情况下,队列的大小会达到树的最大宽度。因此,空间复杂度为O(w),其中w是树的最大宽度。