2015-09-20 51 views
2

我想知道基本的算法來計算二叉搜索樹Java的二叉搜索樹_從根到最近的葉子

我想用這樣的代碼從根 最接近葉距離的距離,

public int closeness() { 
    return closeness(root); 
} 

public int closeness(Node x) { 

} 

謝謝。

+0

你的樹是否平衡? –

+0

不需要平衡 – IAMBEAST

回答

3

你需要採取的最低的每一個分支的「接近性」加一:

public int closeness(Node x) { 
    if (x == null) { 
    return Integer.MAX_VALUE; 
    } 
    if (x.left == null && x.right == null) { 
    return 0; 
    } 
    return Math.min(closeness(x.left), closeness(x.right)) + 1; 
} 

或者稍微詳細無「MAX_VALUE」招忽略空分支Math.min()

public int closeness(Node x) { 
    if (x.left == null) { 
    if (x.right == null) { 
     return 0; 
    } 
    return closedness(x.right) + 1; 
    } 
    if (x.right == null) { 
    return closedness(x.left) + 1; 
    } 
    return Math.min(closeness(x.left), closeness(x.right)) + 1; 
} 
+0

我認爲這是不對的..... – IAMBEAST

+0

有什麼問題?也許澄清/擴大這個問題? –

+1

emmm okay葉節點沒有任何孩子,但if語句沒有一個孩子時返回。但是,當我將其更改爲&&時,它會使空指針異常錯誤... – IAMBEAST

1

實現您的需求的一個快速構思是遞歸地遍歷BST(左和右子樹)並沿途計算在到達葉節點之前必須經過的節點數。最後,您可以使用簡單的MIN/MAX函數來確定最接近根的葉節點。請注意,這個想法適用於計算距離,而不是實際(最近的)葉節點本身。我認爲實施這個應該不會太困難。如果您有任何其他問題,請隨時詢問。