当前位置:   article > 正文

159.二叉树:二叉树的层平均值(力扣)

159.二叉树:二叉树的层平均值(力扣)

代码解决

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10. * };
  11. */
  12. class Solution {
  13. public:
  14. vector<double> averageOfLevels(TreeNode* root)
  15. {
  16. queue<TreeNode*> que; // 定义队列用于层次遍历
  17. if (root != NULL) que.push(root); // 如果根节点不为空,则将根节点加入队列
  18. vector<double> result; // 声明结果向量,用于存储每层的节点值平均值
  19. while (!que.empty()) // 当队列不为空时,继续处理
  20. {
  21. int size = que.size(); // 获取当前层的节点数量
  22. double sum = 0; // 初始化当前层节点值的和
  23. for (int i = 0; i < size; i++) // 遍历当前层的每一个节点
  24. {
  25. TreeNode* node = que.front(); // 从队列中取出一个节点
  26. que.pop(); // 将该节点从队列中移除
  27. sum += node->val; // 累加节点值
  28. if (node->left) que.push(node->left); // 如果该节点有左子节点,将其加入队列
  29. if (node->right) que.push(node->right); // 如果该节点有右子节点,将其加入队列
  30. }
  31. result.push_back(sum / size); // 计算当前层节点值的平均值,并加入结果向量
  32. }
  33. return result; // 返回结果向量
  34. }
  35. };

代码是解决“二叉树的层平均值”问题的C++代码,这个问题要求计算二叉树中每一层的节点值的平均值,并返回一个包含这些平均值的列表。

代码同样使用了广度优先搜索(BFS)的方法。主要思路是使用一个队列来进行层次遍历,在每一层遍历的时候,计算所有节点的值的总和以及节点的数量,然后用总和除以节点数量得到平均值。

这里简要解释一下代码的工作流程:

  1. 初始化一个空的结果向量 result 来存储每层节点值的平均值。
  2. 使用一个队列 que 来进行层次遍历,首先判断根节点是否为空,如果不为空,则将其加入队列。
  3. 当队列不为空时,进行遍历:
    • 获取当前队列的长度,这个长度代表了当前层的节点数。
    • 初始化一个变量 sum 来存储当前层节点值的总和。
    • 遍历当前层的每一个节点:
      • 从队列中取出一个节点。
      • 将这个节点的值加到 sum 上。
      • 如果这个节点有左子节点或右子节点,将它们加入队列,以便进行下一层的遍历。
    • 计算当前层节点值的平均值(sum / size),并加入结果向量。
  4. 队列为空时,遍历结束,返回结果向量。

这个算法的时间复杂度是 O(n),因为每个节点都会被访问一次,其中 n 是树中节点的数量。空间复杂度也是 O(n),因为需要存储整个树的节点。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/658203
推荐阅读
相关标签
  

闽ICP备14008679号