2016-11-17 164 views
-3
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

您不打印代碼中的任何位置。 – nullpointer

+0

什麼是一個節點這裏也沒有定義。你在哪裏試圖保存結果? – nullpointer

+0

BST t1 = new BST (new Integer [] {1,5,9,12,13,15}) –

回答

-1

您需要通過數組迭代打印元素在裏面。在Java中,數組是一個對象,因此在您的情況下,將打印對該對象的引用。嘗試

for(int i = 0; i < t1.length(); i++) { 
    System.out.println(t1[i]); 
} 
+0

你不應該在main中使用for循環。 –

+0

我認爲OP意味着在從數組構造它之後打印樹。 – sprinter

+0

是的。這裏是我的完整代碼,如果有幫助的話:http://pastebin.com/9SYJ584f –

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