Die Idee besteht darin, den Pfad zu finden, dessen Wert am größten ist (die Summe der Werte der Knoten auf diesem Pfad). EDIT: Die Knoten sind völlig ungeordnet, was bedeutet, dass Sie den gesamten Pfad durchsuchen müssen, um zu wissen, ob ein Pfad einen größeren Wert als ein anderer hat. HierVerbesserung der Laufzeit der Funktion Berechnung der maximalen Summe der Knotenwerte in einem Binärbaum
ist der Knoten Konstruktor des Baumes:
var Node = function(val) {
this.val = val;
this.left = null;
this.right = null;
}
Hier wird die Funktion den Maximalwert von Pfaden Berechnung:
function maxPath(top) {
if (top.right === null || top.left === null) return top.val;
return Math.max(top.val, Math.max(top.val + maxPath(top.left), top.val + maxPath(top.right)));
}
Die Funktion ziemlich ineffizient ist und nur eine Antwort zurückgeben vernünftigerweise schnell (innerhalb einer Sekunde) für einen Baum, der ungefähr ~ 25 Level tief ist. Ich versuche, den maximalen Summenpfad für einen Baum zu finden, der 100 Stufen tief ist, scheint nicht meinen Weg dorthin zu finden. Gibt es eine Möglichkeit, die Laufzeit zu verbessern?
Würde das nicht nur die Laufzeit nach dem zweiten Mal verbessern? Was wäre der beste Weg, dies zu tun? – pauld
Ich änderte die Antwort. –
Entschuldigung, ich habe eine wichtige Unterscheidung vergessen - die Knoten sind völlig ungeordnet, also einfach den Pfad hinunterzugehen, wo der Wert von links nach rechts groß ist, garantiert nicht, dass Sie die größte Gesamtwegsumme finden. – pauld