java 递归排序的二叉搜索树,return 字符串

java Binary Search Tree inorder recursively, return string

我有一个 toString 方法,它应该 return 一个按顺序表示整个二叉搜索树的字符串。我已经走到这一步了,但这只是按顺序打印出数字,而 toString 方法当然只是 returns rootNode 的值。我不知道该如何解决。

@Override
public String toString() {
    if (rootNode == null){
        return "";
    }
    else {
        return inorder(rootNode.data);
    }
}

/** 
 * @param root
 */
public String inorder(Node<T> root){
    if (root != null){
        inorder(root.left);
        System.out.println(root.value + " ");
        inorder(root.right);
    }
}

这个问题困扰我好几个小时了。

也许你可以试试这个

@Override
public String toString() 
{
    java.lang.StringBuilder toReturn = new java.lang.StringBuilder();  
    if (rootNode == null){
        return "";
    }
    else{
        inorder(rootNode.data , toReturn);
    }
    return toReturn.toString();
}

/** 
 * @param root
 */
public void inorder(Node<T> root , java.lang.StringBuilder treeLikeStringBuilder){
    if (root != null){
        inorder(root.left);
        System.out.println(root.value + " ");
        treeLikeStringBuilder.append( root.value.toString() + " " );
        inorder(root.right);
    }
}

inorder(Node, StringBuilder) 签名反而有助于为中序遍历构建类似字符串的结构,因此 toString() 可以 return 字符串中序遍历,还使用 ​​StringBuilder 以便更改对作为参数 (StringBuilder toReturn) 传递给方法 inorder(Node , StringBuilder) 的 MUTABLE StringBuilder 所做的更改将反映回 toString() 方法中的更改,希望它有所帮助??

下面的算法简化了您的任务,它所做的只是访问关于 inOrder 算法的每个节点,并将该节点数据附加到字符串中。

public void inOrder(Node<T> root, string NodeData){ // Algorithm for inOrder - "left child node, root, right child node"
    if (root != null){
        inOrder(root.left, NodeData);  // traverse left sub tree
        NodeData += root.Data.ToString() + "  |  "; // append to NodeData
        inOrder(root.right, NodeData); // traverse right sub tree
    }
}

像这样调用方法:

string TreeNodeData = "";
Tree.inOrder(ENTER ROOT OF TREE HERE, TreeNodeData);

最后,您可以通过以下方式查看结果:

System.out.println(TreeNodeData);