Return tree order string

EDIT This has been resolved using StringBuilder, as suggested in this thread. Thanks: D

Hello,

I have a tree and am trying to return a String string in order.

Currently, I can print a tree with something like this:

    public void inOrder() {
        if (left != null) left.inOrder();
        System.out.print(content + " ");
        if (right != null) right.inOrder();
    }

But what I want to do is return a String (and not print the contents of each node during the recursion), and I cannot decide how to do this. I tried many variations of the code below, but it just returns the last element that it finds in recursion.

 public String inOrder(String string) {
        if (left != null) left.inOrder(string);
        string += content;
        if (right != null) right.inOrder(string);

        return string;
    }
+1
source share
4 answers

java. String , String string. , string .

, StringBuilder. , , .

+5

Java, - String, . , .

StringBuilder String:

public StringBuilder inOrder(StringBuilder string) {
        if (left != null) left.inOrder(string);
        string.append(content);
        if (right != null) right.inOrder(string);

        return string;
}

: http://www.javaworld.com/javaqa/2000-05/03-qa-0526-pass.html, , Java .

, .

+2

String concatenation, - , .

/**
 * creates an Inorder-string-view of this tree and appends it to the given string.
 * @return the new String.
 */
public String inOrder(String string) {
    if (left != null)
        string = left.inOrder(string);
    string += content;
    if (right != null)
        string = right.inOrder(string);
    return string;
}

( ) , += String, string content - , the number of later nodes ( ) (+1). :

public String inOrder() {
    String leftS; String rightS;
    if (left != null)
       leftS = left.inOrder();
    else
       leftS = "";
    if (right != null)
       rightS = right.inOrder();
    else
       rightS = "";
    return leftS + content + rightS;
}

:

public String inOrder {
   return
      (left != null ? left.inOrder() : "") +
      content +
      (right != null ? right.inOrder() : "");
}

(+1), "" ( ) . ( .)

StringBuilder , ( StringBuilder) , , StringBuilder ( , StringBuilder ).

+2

Java . , , . , , ( ).

string += content;

String . String.

You need to pass an instance of StringBuilder into your method and add StringBuilder to this:

public String inOrder() {
    StringBuilder strinBuilder = new StringBuilder();
    postOrder(stringBuilder);
    return stringBuilder.toString();
}

private void postOrder(StringBuilder stringBuilder) {
    if (left != null) left.postOrder(stringBuilder);
    if (right != null) right.postOrder(stringBuilder);
}
0
source

All Articles