2016-11-06 12 views
0

私は、バイナリツリーを偽りの表記法でツリーの文字列に変換する方法を開発中です。ここで私はこれまで得たものである:Java:バイナリ検索ツリーを文字列に変換する方法

//both of this methods are in the tree class, 
//so every other method or variable are directly visible 

/*this method creates the string, and then 
* calls another method to fill the string with the 
* tree in pre-order, and then retuns the string 
alredy filled.*/ 

public String linealNotation(){ 
    String line = new String(); 
    linearize(line,root); //root is the Node wich starts the tree. 
    return line; 
} 
//this method is the one with fills the string with an pre-order reading. 
private void linearize(String line, Node n){ 
    if(n==null) 
     return; 
    line.concat(""+n.data); //this is my cry-blood way to insert the  
    line.concat("(");  //int stored in the node into the string 
    linearize(line,n.left); 
    line.concat(","); 
    linearize(line,n.right); 
    line.concat(")"); 
} 

しかし、私は私のメソッドによって返された文字列を印刷するとき、何も表示されない、とString.lengthです()私にはゼロを返します。

おそらく私の方法での連結方法は間違っていますが、私は文字列科学であまり使用されていません。

+0

'' linealNotation'からline'が* *あなたは 'linealNotation'からの戻り値を使用する場所にあることを意味' linearize'( 'concact'は、文字列の内容を変更しない)、によって変更されません、それは空の文字列になります。 String'sはJavaで/ /不変である '、以前のコメントに細かい点を入れて – Michael

+0

、あなたは彼らに何かを「挿入」またはいずれかの方法で、その内容を変更することはできません。あなたは古いものの内容に基づいてのみ新しいものを作ることができます。 – BadZen

答えて

2

Stringは変更できません。内容を変更することはできません。 concatメソッドは、既存のメソッドに追加するのではなく、新しいStringを返します。

Stringの代わりにStringBuilderを使用してください。あなたのコードは次のようになります。 、

  • linealNotation方法でtoStringの使用に注意してくださいStringに戻すStringBuilderを変換します。
  • append
  • 方法の使用は、一緒にデータを連結します。

public String linealNotation(){ 
    StringBuffer line = new StringBuffer(); 
    linearize(line,root); 
    return line.toString(); 
} 


private void linearize(StringBuilder line, Node n){ 
    if (n==null) { 
     return; 
    } 
    line.append(n.data); 
    line.append("(");  
    linearize(line,n.left); 
    line.append(","); 
    linearize(line,n.right); 
    line.append(")"); 
} 
0

行変数のデータ型をStringBufferまたはStringBuilderにする必要があります。

文字列は、Javaで不変であるので、あなたは、(手段は、この文脈で変異する)連結しようとしているとき、それは動作しませんので。

または、あなたはStringに固執している場合は、再度、すなわち

line = line.concat("blahblah"); 

行目に返され、連結文字列が参照すべきである。しかし、それは少し非効率的です。

関連する問題