BST最长路径的平均值

时间:2016-08-07 01:26:58

标签: c++ recursion binary-search-tree

我试图从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,并且它必须将平均值或至少元素的总和返回给公共函数,以便它可以返回平均值,知道总和

2 个答案:

答案 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。