2017-01-26 6 views
2

Ich habe toString Methode für BST implementiert, aber sieht aus wie es funktioniert, ist aber nicht stabil. zum Beispiel für diesen Baum toString gut funktioniert: correct aber für diese, ist es falsch wrongBinary Search Tree toString Java

Kann mir jemand helfen, was los ist?

@Override 
    public String toString() { 
     return "(" + toStringB(new StringBuilder(), root()).toString() + ")"; 
    } 

    private StringBuilder toStringB(StringBuilder string, Node<E> node) { 
     if (node != null) { 
      string.append(node.getElement()); 
      if (left(node) != null) { 
       toStringB(string.append(" ("), left(node)); 
      } 
      if (right(node) != null) { 
       toStringB(string.append(", "), right(node)); 
       string.append(')'); 
      } 
     } 
     return string; 
    } 
+0

Können Sie uns den vollständigen Code geben, damit wir ihn auch ausführen können? –

Antwort

0

Ihr Problem liegt hier:

 if (left(node) != null) { 
      toStringB(string.append(" ("), left(node)); 
     } 
     if (right(node) != null) { 
      toStringB(string.append(", "), right(node)); 
      string.append(')'); 
     } 

Wenn Sie einen linken Knoten haben, aber keine richtigen Knoten, werden Sie (left anhängen. Wenn Sie einen rechten Knoten ohne linken Knoten haben, fügen Sie , right) an. Das gibt Ihnen Ihre nicht ordnungsgemäß übereinstimmenden Klammern und Streukommas.

Ich möchte darauf hinweisen, Ihre "funktioniert" Beispiel ist eigentlich nicht korrekt ist, entweder:

(10 (7 (3 (2, 5), 9), 10, 30 (11 (10)))

Lassen Sie sich die Knoten unter 7 verstecken und 30:

(10 (7 (...), 10, 30 (...))

Ihr Stammknoten 10 hat 3 Kinder 7, 10 und 30. Dies ist kein Binärbaum!

Oh, und unsymmetrische Klammern auch.

+0

oh, danke, habe das nicht bemerkt. Kannst du bitte helfen, es zu reparieren? –

+0

Wenn Sie einen linken oder einen rechten Knoten haben, hängen Sie die offenen Klammern an. Wenn Sie einen linken Knoten haben, hängen Sie ihn an. Wenn Sie einen linken UND rechten Knoten haben, fügen Sie ein Komma hinzu. Wenn Sie einen rechten Knoten haben, hängen Sie ihn an. Wenn Sie einen linken ODER rechten Knoten haben, fügen Sie eine enge Klammer an. – AJNeufeld

+0

Oh, vielen Dank, denn jetzt funktioniert es! (10 (5 (3 (2), 9), 10 (30 (11 (10))))) –