需要帮助打印递归

时间:2016-11-17 04:15:44

标签: java

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})

但是当我尝试打印出来时,它给了我一个参考

2 个答案:

答案 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(", "))