Ich habe eine Baumstruktur. Die Aufgabe ist es, die größte Summe/Gewicht von Pfad Knoten zu finden, aber ich kann nur n mal verschieben. Das ist ok, aber "nach oben"/"zurück" kostet nichts. Wie kann ich das erreichen?Maximale Teilbaumsumme im Baum mit begrenzter Länge
Unten ist mein Code, aber das Problem ist, dass auf jeden Knoten nur einmal zugegriffen werden kann, so dass es nicht funktioniert.
int mSum(Node* node, int mvLeft) {
if (node == nullptr) { return 0; }
if (mvLeft == 0) { return node->value; }
mvLeft--;
int sum = max(mSum(node->left, mvLeft), mSum(node->right, mvLeft));
return node->value + max(sum, mSum(node->parent, mvLeft + 1));
}
Hier ist das Beispieldiagramm. Die Zahlen auf den Knoten stellen die Kosten dar, um dorthin zu gelangen. Jeder Knoten kann nur einmal besucht werden, außer "zurück" gehen.
Die n Schritt Grenze hier ist 3, zählen wir auch die Eingabe der Grafik, so ist das richtige Ergebnis 21, weil: 2-> 8-> 11.
Wenn wir Grenze von 4 hätte Schritte wäre das Ergebnis 31 sein: 2-> 10-> 8-> 11
Mein Freund es mit DFS zu tun versucht, ist er recht? Was ist der beste Algorithmus?
Sie könnten versuchen, ein hinzufügen n Array von besuchten Notizen in die Paraemter-Liste und zählen Sie den Knotenwert nur, wenn sein Knoten nicht im Array ist – Turo
natürlich könnte ich, aber dann würde ich in-Entfernen-the-Nodes-from-that-Array-Problem, denke ich – Toumash
Speicher ist in diesen Tagen billig, ich würde jedem Anruf seine neue Anordnung geben. – Turo