我有一个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);
}
}
我已经坚持这个问题几个小时了。
答案 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);