2016-05-04 9 views
2

Ich versuche, alle Wurzel zu Blatt-Pfade für einen Binärbaum zu drucken, und ich muss das Ergebnis als eine Liste der Zeichenfolgen zurückgeben. Ich versuche, Rekursion und StringBuilders dazu zu verwenden, aber mit jedem neuen Pfad, anstatt den alten Pfad zu entfernen, hängt es daran an.Probleme beim Drucken von Wurzel-zu-Blatt-Pfaden für Binärbaum

Wenn die Pfade von Wurzel zu Blatt 5-> 3-> 2-> 1, 5-> 3-> 4, 5-> 7-> 6 und 5-> 7-> 8 sind (das Beispiel I verwende), mein Ergebnis wie die folgend kommt:

5-> 3-> 2> 1

5-> 3-> 2> 14

5-> 3-> 2-> 147-> 6

5-> 3-> 2-> 147-> 68

Dies ist wegen der Art, wie ich bin mit String aber ich bin nicht in der Lage finde heraus, was ich falsch mache. Folgendes ist mein gesamter Code. Jede mögliche Hilfe würde geschätzt werden:

+0

Ich glaube nicht, dass Sie dies mit einer einzigen Zeichenfolge tun können. Vielmehr wird jeder rekursive Schritt eine Sammlung von Pfaden zurückgeben. –

Antwort

0

Das Problem tritt auf, wenn Ihr Baum zwei Wege vom gegenwärtigen Knoten hat. Sie übergeben dieselbe Instanz von StringBuilder in beide Instanzen von binaryTreePathsHelper. Das bedeutet, dass beide Pfade in einem einzigen String Builder enden. Die einfachste Lösung ist, StringBuilder nicht zu umgehen Übergeben Sie stattdessen String herum. Dann erstellen Sie jedes Mal neue String s, wenn Sie sie an Ihren übergebenen String anhängen, wodurch die Möglichkeit einer versehentlichen Wiederverwendung von Objekten eliminiert wird. Wenn Sie Instanzen von StringBuilder wirklich weitergeben möchten, müssen Sie sie duplizieren, wenn Sie rekursiv binaryTreePathsHelper aufrufen. Zum Beispiel:

binaryTreePathsHelper(bT.getRightChild(), new StringBuilder(sb.toString()); 
+0

Danke eine Tonne. Ich wusste, dass ich das falsch machte, weil ich den Debugger in Eclipse verwendete, aber nicht wusste, wie ich es beheben sollte. Ich habe versucht, Kopien als flache Kopien zu übergeben, aber das hat nicht geholfen. Das hat es perfekt repariert, also danke! – RajveerParikh

+0

Gern geschehen. Lassen Sie zukünftige Leser wissen, indem Sie die Antwort akzeptieren, die Ihnen geholfen hat :) –

Verwandte Themen