查找二叉树 c++ 的平均值

Find average value of binary tree c++

本文关键字:平均值 c++ 二叉树 查找      更新时间:2023-10-16

所以我正在尝试编写一个递归函数来返回 c++ 中二叉树值的平均值。这是我所拥有的,这不起作用:

double avg(bNode* root)
{
    if(!root) return 0;
    int sum = avg(root->left) + avg(root->right) + root->value;
    if(root->left && root->right) return sum/3;
    else if(!root->left && !root->right) return sum;
    else return sum/2;
}

感谢您的帮助。

这是一个非常简单的例子,应该说明为什么你计算的不是平均值:

    10
   /  
  4    12 
         
          20

在"12"节点,平均值将为(12 + 20) / 2 = 16

然后在10节点上,平均值将(4 + 10 + 16) / 3 = 10

但是,平均值确实11.5.

问题是平均值的平均值不等于一个大的正确平均值。 在每个级别上,您必须将平均值乘以用于计算它的节点数(即总和),然后再将其用于下一个平均值计算。

一种更简单的方法可能是计算总和,然后除以树中的节点数。

一种技术的一些伪代码是:

class accumulator
{
    int sum = 0;
    int count = 0;
    // implement the obvious operator+
};
accumulator avg(bNode* root)
{
    if(!root) return <empty accumulator>
    return <recursive children> + <self>;
}
int main()
{
    accumulator acc = avg(root);
    // ..calculate average..
}