2017-03-22 21 views
-1

BSTを文字列に変換するメソッドを作成する必要があります。各子にはインデント文字が前に付いています。バイナリ検索ツリーから文字列へ

例:

BinaryTreeSet set=new BinaryTreeSet(); 
set.add(6); 
set.add(4); 
set.add(3); 
set.add(5); 
set.add(9); 
set.add(10); 
set.add(8); 
set.add(0); 
System.out.println(set.treeString()); 

=> 6 
    => 4 
    => 3 
     => 0 
    => 5 
    => 9 
    => 8 
    => 10 

を生成する必要があります私は今、数時間のために試してみました、しかし、私はどんな進歩を遂げることはありません。

私が得ることができる最高のは、次のコードで

=> 6 
=> 0 
=> 3 
=> 5 
=> 4 
=> 8 
=> 10 
=> 9 

た:また、私は上の本当のアイデアを持っていない ...

public String treeString() { 

    StringBuilder builder = new StringBuilder("=> " + root); 
    builder.append(System.getProperty("line.separator")); 

    nodeString(root, builder); 

    return builder.toString(); 

    } 

    private void nodeString(BinaryTreeNode node, StringBuilder builder) { 
     if (node == null) { 
      return; 
     } 
     if (node.left != null) { 
      nodeString(node.left, builder); 
      builder.append("=> " + node.left); 
      builder.append(System.getProperty("line.separator")); 
     } 
     if (node.right != null) { 
      nodeString(node.right, builder); 
      builder.append("=> " + node.right); 
      builder.append(System.getProperty("line.separator")); 
     } 
    } 

どういうわけか私は正しい順序を取得する方法を見つけ出すカントインデントを適切にする方法。

ありがとうございます!

+0

あなたの例(値を追加するとき)あなたはBSTを使用している場合は所望の出力を対応していません。 'set.add(6); set.add(4); set.add(3); 'はルートとして6、左の葉として4、右の葉として3を生成する必要があります... – KarelG

+0

次に、BSTの別の定義を学びました! 私たちは、左の子は親よりも小さくする必要があり、右は大きくする必要があるということです。 ありがとうとにかく、私はそれが働いている! – schoeni

+0

@shoeniまあ...あなたは正しい。私は別の木を念頭に置いている。 'set.add(6);を使用します。 set.add(4); set.add(3); 'はBSTで実際にはルートを6、左を4、左を3とします。 – KarelG

答えて

0

builder.append行をの前に置き換えて、の前に再帰的なnodeStringを呼び出してみてください。あなたのサンプル出力のようにインデントを追加する必要がある場合は、再帰呼び出しでも呼び出し深度を追跡する必要があります。

+0

ありがとう、注文の問題を完全に解決しました。私はインデントを済ませたら、完成したコードを投稿します! – schoeni

0

この私たちが学んだBSTの定義については、問題を解決するために動作します:

private void nodeString(BinaryTreeNode node, StringBuilder builder, int count) { 
     if (node == null) { 
      return; 
     } 
     // Left 
     if (node.left != null) { 
      for (int i = 0; i < count; i++) { // Adding indent 
       builder.append(" "); 
      } 
      builder.append("=> " + node.left); 
      builder.append(System.getProperty("line.separator")); 
      nodeString(node.left, builder, ++count); 
      --count; 
     } 
     // Right 
     if (node.right != null) { 
      for (int i = 0; i < count; i++) { // Adding indent 
       builder.append(" "); 
      } 
      builder.append("=> " + node.right); 
      builder.append(System.getProperty("line.separator")); 
      nodeString(node.right, builder, ++count); 
      --count; 
     } 
    } 
関連する問題