2015-10-27 61 views
2

我在使用Java創建的基本二叉查找樹時遇到了問題。我試圖在控制檯中輸出樹結構,並在節點值之前使用預先佔用的空格來表示節點的深度。樹結構不正確打印

由於某種原因,我的printTree()函數正在輸出一個似乎稍微向後的樹結構。我不認爲(5 0.0)會縮進,因爲它會留在像這樣的基本樹中的根。

下面是我的功能和輸出:

c創建了根,s增加了一個鍵和值,和xp輸出樹。

private int k; 
private float d; 
private Node left, right; 

public Node(int k) { 
    this.k = k; 
} 

public Node(int k, float d) { 
    this.k = k; 
    this.d = d; 
} 

private int height(Node n) { 
    if (n == null) 
     return -1; 
    return 1 + Math.max(height(n.left), height(n.right)); 
} 

private void printTree(Node n) { 
    if (n == null) 
     return; 
    System.out.println(new String(new char[3 * height(n)]).replace("\0", " ") + "(" + n.k + " " + n.d + ") "); 
    printTree(n.left); 
    printTree(n.right); 
} 

輸出:

enter image description here

我敢肯定,基於我的輸入有5不應該在所有的,因爲這將是根節點縮進。

我認爲它應該是這個樣子(基於二進制搜索樹):

(5 0.0) 
    (4 1.2) 
     (2 3.5) 
    (6 7.5) 
     (87 96.5) 

(當然是有前綴空間的正確量)

任何人都可以解釋我是什麼做錯了?

回答

1

您計算空間的數量爲3*height(n)height(n)計算左側和右側樹的最大路徑長度,所以根始終是最靠右的。

或者將節點的高度計算爲從節點到根的路徑的長度,或者預先計算最大高度並將節點的空白數設置爲maxHeight - height(n)

+0

你可以用'maxHeight'來定義你的意思嗎? – Nic

+0

您需要找到所有節點的最大高度。在上面的'height(...)'函數的當前實現中,這將是'height(rootNode)'。 – realitybreeder