BST最长路径的平均值
Average of the longest path of a BST
我试图从BST的最长路径中找到int
类型的数据的总和和平均值。我制作了以下函数:
int table::longest(){
return longest(root);
}
int table::longest(node* curr){
int suml = 0;
int sumr = 0;
if(!curr)
return 0;
int hleft = height(curr->left);
int hright = height(curr->right);
if(hleft > hright){
suml = curr->data;
return suml += longest(curr->left);
}
sumr = curr->data;
return sumr += longest(curr->right);
}
int table::height(node* curr){
if(!curr)
return 0;
int hLeft = 1 + height(curr->left);
int hRight = 1 + height(curr->right);
if(hLeft > hRight)
return hLeft;
return hRight;
}
函数longest
向我返回数据的总和,但如何在不再次遍历树的情况下返回其平均值,以计算出最长路径中有多少节点?
EDIT:私有函数longest
的原型必须是int longest(node* root)
,它必须向公共函数返回平均值或至少元素的总和,这样它才能在知道总和的情况下返回平均值
您的代码没有经过优化。从不建议不必要地重复遍历。您可以使用下面给出的函数。它将在O(n(时间内完成任务,其中n是二叉树中的节点数。
int maxHeight = 0;
int longestPathSum = 0;
int table::longest(){
longest(root, 0, 0);
return longestPathSum;
}
void table::longest(node* curr, int sum, int height){
if(curr == NULL) return 0;
sum += curr->data;
if(++height > maxHeight) {
maxHeight = height;
longestPathSum = sum;
}
longest(curr->left, sum, height);
longest(curr->right, sum, height);
}
从BST 的最长路径中找到int类型数据的总和和平均值
sum=longestPathSum;
average=longestPathSum/maxHeight;
您可以传递权重和高度的总和作为参考,而不是函数"最长"返回权重的总和。这将允许不遍历BST两次。
相关文章:
- 计算数组c++的平均值
- 如何将更多文件夹添加到c++include路径
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- C++A*算法并不总是在路径中具有目标节点
- 计算平均值,不包括上次得分
- 从函数角度看ID到文件路径的内部与外部映射
- 彩色图像的卤化物处理平均值
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- boost xml parsingl将xml的路径作为变量发送
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- 如何使用cppcheck处理半相对包含路径
- 在C++中设置基于操作系统的文件路径
- 基于编译器选项的编译二进制路径
- 按平均值替换数组中的元素
- 如何返回多个矢量对象的平均值?C++
- 按边长度递归搜索图中所有可行路径
- 使用变量值作为 PlaySound 中的路径
- 如何转换真实路径 CString c++
- 从 GUID 获取 USB 卷路径
- BST最长路径的平均值