Ich versuche eine rekursive Methode zu implementieren, um die Baumhöhe eines beliebigen Baumes, nicht eines binären Baumes zu bestimmen. Wir haben zwei Eingaben, eins ist 'n' die Anzahl der Ecken. Die zweite Zeile enthält n Integerzahlen von -1 bis n - 1 Eltern von Vertices. Wenn der i-te eine von ihnen (0 ≤ i ≤ n - 1) -1 ist, ist Vertex i die Wurzel, andernfalls ist es der 0-basierte Index des Elternteils des i-ten Vertex. Es ist garantiert, dass es genau eine Wurzel gibt. Es ist garantiert, dass die Eingabe einen Baum darstellt.Rekursive arbiträre Baumhöhe in Python
Zum Beispiel ist ein Eingang: n = 5 parent = [4, 1, 4, 1, 1] Dies bedeutet, dass der Knoten 0 ist ein Kind des Knotens 4, den Knoten 1 die Wurzel, Knoten 2 ist ein Kind von Knoten 4, Knoten 3 ist ein Kind von Knoten 1 (der Wurzel) und Knoten 4 ist ebenfalls ein Kind von Knoten 1 der Wurzel. Seit:
4 -1 4 1 1
Der Ausgang wäre die Höhe des Baumes der 3. wir eine langsame Methode gegeben sind eine mit der Umsetzung eine schnellere Methode beauftragt . Ich fürchte, ich kann nicht sehen, wie die Knoten Eingänge in etwas wie eingeben:
Vielen Dank im Voraus!
# python3
import sys, threading
sys.setrecursionlimit(10**7) # max depth of recursion
threading.stack_size(2**27) # new thread will get stack of such size
n = 5
parent = [4, -1, 4, 1, 1]
class TreeHeight:
def read(self, n, parent):
self.n = n
self.parent = parent
def compute_height(self):
# Replace this code with a faster implementation
maxHeight = 0
for vertex in range(self.n):
height = 0
i = vertex
while i != -1:
height += 1
i = self.parent[i]
maxHeight = max(maxHeight, height);
return maxHeight;
def main():
tree = TreeHeight()
tree.read(n, parent)
print(tree.compute_height())
threading.Thread(target=main).start()
Ah ja Memoization. Ich kann einfach keinen Weg sehen, den Baum zu bauen und ihn mit den gegebenen Informationen zu durchqueren, außer der bereits gegebenen Methode. – Pewnack
Da dies wie Hausaufgaben für mich aussieht, ist das so viel wie ich bereit bin zu geben, ohne etwas Anstrengung von dir zu sehen: Aus den [Richtlinien] (http://meta.stackexchange.com/questions/10811/how-do -i-ask-and-answer-Hausaufgaben-Fragen): Eine Antwort zu geben, die einem Schüler nicht hilft zu lernen, liegt nicht im Interesse des Schülers. Daher können Sie Ihre Hausaufgaben anders als andere Fragen behandeln. – TemporalWolf
Keine Sorgen. Vielen Dank. – Pewnack