Ich versuche die Summe und den Durchschnitt der Daten vom Typ int
aus einem längsten Pfad eines BST zu finden. Ich habe folgende Funktionen aus:Durchschnitt des längsten Pfades eines 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;
}
Die Funktion longest
mir die Summe der Daten zurückgibt, aber wie seine durchschnittlichen zurückzukehren, ohne den Baum wieder in Ordnung zu durchlaufen, wie viele Knoten in dem längsten Weg ist, um herauszufinden, ?
EDIT: Der Prototyp der privaten Funktion longest
hat int longest(node* root)
sein, und es hat den Durchschnitt oder zumindest die Summe der Elemente der Öffentlichkeit Funktion zurückzukehren, damit es die durchschnittliche wissen die Summe zurückgeben kann
Sie durchlaufen bereits zweimal (tatsächlich, 'N' Zeiten, wo' N' die Tiefe des Baumes ist - Ihr Algorithmus ist quadratisch in der Tiefe). "Höhe" macht eine eigene Traversierung. Sie benötigen eine einzelne Funktion, die sowohl die Höhe als auch die Summe der Gewichte zusammenführt - das minimiert die Arbeit. –
@IgorTandetnik: Wie kann ich das mit dem gegebenen Funktionsprototyp machen? –
Schreiben Sie eine Hilfsfunktion mit einem anderen Prototyp, rufen Sie sie von dieser Funktion auf. –