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);
我有一个 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);