我试图从BST的最长路径中找到bubbleView
类型的数据的总和和平均值。我已经完成了以下功能:
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
的原型必须是longest
,并且它必须将平均值或至少元素的总和返回给公共函数,以便它可以返回平均值,知道总和
答案 0 :(得分:1)
您的代码未经过优化。从不推荐不必要的重复遍历。您可以使用下面给出的功能。它将在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;
答案 1 :(得分:0)
不是函数“最长”返回权重之和,而是可以将权重和高度之和作为参考。这将不允许两次遍历BST。