我想從BST的最長路徑中找到類型爲int
的數據的總和和平均值。我做了以下功能:BST的最長路徑的平均值
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
的原型必須是int longest(node* root)
它具有的元素的平均或至少總和返回公共職能,因此它可以返回平均知道總和
您已經遍歷了兩次(實際上,'N'次,其中'N'是樹的深度 - 您的算法在深度上是二次的)。 'height'自己遍歷。你需要一個單一的函數,將高度和權重的總和一起返回 - 這將最大限度地減少工作量。 –
@IgorTandetnik:我如何才能做到具有給定的函數原型? –
編寫一個具有不同原型的助手函數,從這個函數中調用它。 –