Java:将二进制搜索树转换为字符串的方法

时间:2016-11-06 04:56:42

标签: java string binary-search-tree

我正在使用一种方法,该方法将二叉树转换为字符串,其中树以笔记法表示法。这是我到目前为止所得到的:

//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()则返回零。

也许我的方法中的连接方式是错误的,但我在字符串科学中并不常用。

2 个答案:

答案 0 :(得分:2)

String是不可变的 - 您无法更改其内容。 concat方法返回新的String,而不是添加到现有的StringBuilder

您要做的是使用String而不是toString。您的代码应如下所示。注意

  • linealNotation方法中使用StringBuilder,将String转换回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(")"); } 方法将数据连接在一起。

{{1}}

答案 1 :(得分:0)

您应该将行变量的数据类型设置为StringBuffer或StringBuilder。

因为字符串在Java中是不可变的,所以当你尝试连接时(在这种情况下意味着变异),它将无法工作。

或者,如果你坚持使用String,那么你应该让返回的concat字符串再次引用行,即

   <div class="cell-md-7 cell-lg-8 cell-xl-9 offset-top-63 offset-md-top-0">
                    <div class="range range-xs-center range-md-left">
                      <div class="cell-sm-6 cell-lg-4">
                        <!-- Guide Post-->
                        <div class="guide-post"><a href="guide-page.html">
                            <div class="guide-post-img-wrap"><img src="images/guides/guide-01-420x280.jpg" width="420" height="280" alt="" class="img-responsive center-block"/></div>
                            <div class="guide-post-body">
                              <div>
                                <p class="guide-post-description text-italic text-gray">Italy</p>
                              </div>
                              <div class="offset-top-4">
                                <div class="h4 text-bold text-atlantis">Venice</div>
                              </div>
                            </div></a></div>
                      </div>
                      <div class="cell-sm-6 cell-lg-4 offset-top-30 offset-sm-top-0">

但是效率不高。