我正在使用一种方法,该方法将二叉树转换为字符串,其中树以笔记法表示法。这是我到目前为止所得到的:
//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 :(得分: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">
但是效率不高。