链接二叉搜索树的标准差

问题描述

我目前正在为我的数据结构课程开展一个项目,该项目涉及使用双向链表类型格式(其中每个节点都有一个左、右和父指针)构建的二叉搜索树。管理树的类也有一个根指针和一个当前指针(如游标)。

我需要构建的函数之一是计算整棵树的标准偏差。不幸的是,我被困在如何在不使用标准库容器的情况下使用这个函数(这在课程中是非常不鼓励的)。我了解如何获得整个树的总和,但是能够单独访问每个数字来计算标准偏差让我感到困惑(因为我可以将树存储为数组并访问内容顺序。

如果这是一个基本问题,或者我遗漏了一些明显的方法,请原谅我。我倾向于在数据结构概念上挣扎,尤其是在递归方面。我不是要求某人编写该函数,而是至少为我指明正确的方向。谢谢!

编辑:感谢 trincot 的帮助,我想错了方法,但您的解释有帮助!

解决方法

我知道如何得到整棵树的总和

所以您知道如何检查每个节点的值并执行以下操作:

sum += current_node->value;

然后也跟踪计数(除非您已经将计数作为列表属性进行跟踪):

sum += current_node->value;
node_count++;

访问完所有节点后,可以计算平均值:

mean = sum / node_count;

然后第二次遍历树的所有节点,并从零开始计算偏差的平方和:

sum_sq_dev += (current_node->value - mean) * (current_node->value - mean);

在您访问了所有节点以累积该平方差之和后,从中计算方差和标准差:

variance = sum_sq_dev / node_count;
std_dev = sqrt(variance);

sample variance 上查看维基百科