BST(T[] array) {
constructBalancedTree(array, 0, array.length - 1);
}
void constructBalancedTree(T[] array, int i, int j) {
if(i > j) {
return;
}
int mid = (i+j)/2;
Node node = new Node(array[mid]);
constructBalancedTree(array, i, mid-1);
constructBalancedTree(array, mid+1, j);
}
我试图弄清楚如何在主要内容中打印出来。我创建了:
BST<Integer> t1 = new BST<Integer>(new Integer[] {1, 5, 9, 12, 13, 15})
但是当我尝试打印出来时,它给了我一个参考
答案 0 :(得分:-1)
您需要遍历数组以打印其中的元素。在Java中,Array是一个对象,因此在您的情况下System.out.println(t1);
将打印对象的引用。尝试
for(int i = 0; i < t1.length(); i++) {
System.out.println(t1[i]);
}
答案 1 :(得分:-1)
我真的不明白你的代码应该做什么。它似乎没有将节点存储在任何地方。我希望constructBalancedTree
应该返回一个节点,不应该吗?类似的东西:
class BST {
private Node root;
BST(T[] array) {
root = constructBalancedTree(array, 0, array.length - 1);
}
private Node constructBalancedTree(T[] array, int i, int j) {
if(i > j) {
return null;
} else {
int mid = (i+j)/2;
Node node = new Node(array[mid]);
node.setLeft(constructBalancedTree(array, i, mid-1));
node.setRight(constructBalancedTree(array, mid+1, j));
return node;
}
}
}
在打印树方面,您有很多选择。您可以添加递归打印子节点的toString
方法;您可以使用访问者设计模式访问所有节点;你可以有一个方法,将值作为列表或流获取:
class Node<T> {
private Node left;
private Node right;
private T value;
public Stream<T> getValues() {
Stream.Builder<T> values = Stream.builder();
if (left != null)
left.getValues().forEach(values::accept);
values.accept(value);
if (right != null)
right.getValues().forEach(values::accept);
return values.build;
}
}
然后您可以打印值:System.out.println(root.getValues().collect(Collectors.joining(", "))
。