[英]How to store a binary search tree into a two-d array and print it out, in Java?
[英]How to print out value as a long string in java binary search tree?
所以我試圖將值打印為我所有節點在BST中都具有的長字符串,問題是我找不到一種方法來保留這些值,因為它們是遞歸方法(inOrder preOrder postOrder),我怎么做? 當我嘗試逐行打印每個值時,我的代碼有效。 提前致謝!
例如,我有這些名字,我想使用BST按字母順序打印出來:傑里,伊萊恩,拉爾夫,愛麗絲,喬治,蘇珊,諾頓,特里西。 我想要的結果:[愛麗絲] [伊萊恩] [喬治] [傑里] [諾頓] [拉爾夫] [蘇珊] [特里克西]
import java.util.Random;
public class TreeNode {
private String value;
private TreeNode left;
private TreeNode right;
public TreeNode(String n) {
value = n;
left = right = null;
}
public void insert(String n) {
if (n.compareTo(value) <= 0) {
if (left == null) {
left = new TreeNode(n);
} else {
left.insert(n);
}
} else {
if (right == null) {
right = new TreeNode(n);
} else {
right.insert(n);
}
}
}
public boolean contains(String n) {
if (n == value) {
return true;
} else if (n.compareTo(value) <= 0) {
if (left == null) {
return false;
} else {
return left.contains(n);
}
} else {
if (right == null) {
return false;
} else {
return right.contains(n);
}
}
}
public TreeNode remove(String n) {
if (n.compareTo(value) < 0) {
if (left != null) {
left = left.remove(n);
}
} else if (n.compareTo(value) > 0) {
if (right != null) {
right = right.remove(n);
}
} else {
if (left == null && right == null) {
return null;
} else if (left != null && right == null) {
return left;
} else if (left == null && right != null) {
return right;
} else {
Random r = new Random();
if (r.nextBoolean()) {
value = left.rightMost();
left = left.remove(value);
} else {
value = right.leftMost();
right = right.remove(value);
}
}
}
return this;
}
public String leftMost() {
if (left == null) {
return value;
} else {
return left.leftMost();
}
}
public String rightMost() {
if (right == null) {
return value;
} else {
return right.rightMost();
}
}
public String inOrder() {
String temp = null;
if (left != null) {
left.inOrder();
}
temp = "["+value+"]";
if (right != null) {
right.inOrder();
}
return temp;
}
public class BinarySearchTree {
private TreeNode root;
public BinarySearchTree() {
root = null;
}
public void insert(String n) {
if (root == null) {
root = new TreeNode(n);
} else {
root.insert(n);
}
}
public boolean contains(String n) {
if (root == null) {
return false;
} else {
return root.contains(n);
}
}
public void remove(String n) {
if (root != null) {
root = root.remove(n);
}
}
public String inOrder() {
if (root != null) {
root.inOrder();
}
return root.inOrder();
}
您可以使用泛型類型 。 類似BinarySearchTree<T>
,其中T
可以是任何類型的對象。 然后,在使用它時,可以將其初始化為BinarySearchTree<String>
,以防需要處理String
您可以在TreeNode
類中具有靜態String變量。 由於變量的一個副本可用於所有實例,因此可以在遍歷時附加值。
例如: myPath += "["+value+"]";
您的temp = "["+value+"]";
是
遍歷完成后,您可以打印TreeNode.myPath
。
只需將調用左側和右側子樹的inOrder
的結果連接起來即可。
public String inOrder() {
String temp = "[" + value +"]";
if (left != null) {
temp = left.inOrder() + temp;
}
if (right != null) {
temp = temp + right.inOrder();
}
return temp;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.