2017-01-26 37 views
2

私はtoStringメソッドをBSTに実装しましたが、動作はしていますが安定していないようです。 が正常に動作しますtoStringこのツリーの例 のために: correct をこの1のために、それは間違っている wrongバイナリ検索ツリーtoString Java

誰も助けることができ、何が起こっているのか?

@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

私たちも実行できるように完全なコードを教えてください。 –

答えて

0

あなたの問題はここにある:

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

あなたが左ノード、ない右のノードを持っている場合は、(leftを追加します。左ノードのない右ノードがある場合は、, right)を追加します。これにより、不適切にマッチしたカッコと迷子のカンマが得られます。

(10(7(3(2、5)、9)、10、30(:

私が指摘したいのですが、あなたのいずれかで、実際の例 "罰金を作品" 正しくありません11(10)))

のは7と30の下のノードを非表示にしてみましょう:

(10(7(...)、10、30(...))

ルートノード10には、子どもが710、および30の3人の子供がいます。これはバイナリツリーではありません!

ああ、不均衡なかっこも同様です。

+0

ああ、ありがとう、これに気付かなかった。あなたはそれを修正するのに役立つことができますか? –

+0

左ノードまたは右ノードがある場合は、開いたかっこを追加します。左のノードがある場合は、追加します。左と右のノードがある場合は、カンマを追加します。右のノードがある場合は、それを追加します。左または右のノードがある場合は、かっこを追加します。 – AJNeufeld

+0

ああ、ありがとう、今は動作します! (10(5(3(2)、9)、10(30(11(10))))) –