2013-02-22 54 views
1

我正在寫一個BST(二叉搜索樹),並有一本書我讀這樣的例子給出了這樣的代碼合併方法(二叉搜索樹)

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

private int height(BinaryNode<E> node) { 
    if (node == null) { 
     return 0; 
    } else { 
     int leftHeight = height(node.left); 
     int rightHeight = height(node.right); 

     if (leftHeight < rightHeight) { 
      return 1 + rightHeight; 
     } else { 
      return 1 + leftHeight; 
     } 
    } 
} 

但沒有說明信息關於爲什麼有兩個獨立的高度方法。 因此,我問你們是否有可能將這兩種方法合併爲一種高度方法。如果沒有,是否有可能?爲什麼不?

讚賞可能的任何幫助, 鮑勃。

回答

1

這是method overloading的一個例子。
有兩個名稱相同的方法,它根據傳遞的參數類型的不同而不同。

第一種方法沒有參數,第二種方法有一個BinaryNode<E>類型的參數。
當第一個方法被調用時,它會調用傳遞給它的第二個方法root變量(我認爲它是BinaryNode<E>類型)。

第一個也是公開的,所以你可以從其他類中調用它,第二個是私有的,只能從它定義的類中調用。

1

假設您提供的方法是樹類的一部分,那麼我看不出如何合併它們。第一個是公共方法,它不需要參數,第二個是幫助遞歸方法,用於檢查給定節點的高度。第一個使用第二個:它在根本身上調用helper方法。第二種方法不應該從外部可見,所以它是私人的。

如果height方法是在Node級別上實現的,那麼它可以在沒有參數的單個遞歸方法中完成。

0

請注意,int height()方法是public。這是將從你的班級以外被調用的那個。它必須決定樹的高度。它會通過呼叫另一個來做到這一點。

另請參閱int height(BinaryNode<E> node)私有,因爲它僅用於public int height()方法以確定任何子樹的高度。