java二进制搜索Tree inorder递归,返回字符串

时间:2017-02-17 00:08:22

标签: java recursion binary-search-tree tostring inorder

我有一个toString方法,它应该按顺序返回一个表示整个二叉搜索树的字符串。我到目前为止,但这只是按顺序打印出数字,而toString方法当然只返回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);
    }
}

我已经坚持这个问题几个小时了。

2 个答案:

答案 0 :(得分:1)

也许你可以试试这个

@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)签名将有助于为inorder遍历构建类似String的结构,以便toString()可以返回该字符串inorder travsersal,也使用StringBuilder以便对MUTABLE StringBuilder进行的更改通过作为参数(StringBuilder toReturn)到方法inorder(Node,StringBuilder)会反映在toString()方法中的变化,希望它有帮助??

答案 1 :(得分:-1)

以下算法简化了您的任务,它所做的就是访问与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);