前幾天我問了一個關於同一個項目的問題,從那時起我們的小組已經設法完成了我們所有的方法,除了一個用於確定二叉搜索樹是否是完成。Recursivley測試二進制搜索樹是否完整
我們使用一個包裝方法和一個輔助方法遞歸地做到這一點。
我們知道我們需要檢查樹的h-1層(h是高度)以確保它是完美的,那麼我們需要確保最後一層上的所有葉節點都從左邊開始沒有差距的權利。
無論我們嘗試什麼,我們都無法弄清楚如何遞歸檢查剩餘的葉節點,以確保它們從左到右依次連續。但是,我們可以確保它完美達到(h-1)級別。
有人能指出我們在正確的方向上如何遞歸檢查最後一級的葉節點,以確保它們左對齊嗎?
迄今爲止這是代碼?
public boolean isComplete()
{
if (isPerfect(root))
return true;
return isComplete(root);
}
/**
*
* @param node
* @return
*/
private boolean isComplete(Node node)
{
if (height(node) > 1)
{
if (node.left != null && node.right != null && (height(node.left) == height(node.right)))
return isComplete(node.left) && isComplete(node.right);
else
return false;
}
}
PS,因爲每一個完美的樹中的所有瑣碎的案件在isPerfect()方法處理也完全
我沒有測試或運行或編譯此。所以,當你的代碼可能工作時,請小心一些小錯誤 –
,它偏離了在包裝方法中只使用一個參數的要求。儘管感謝您的輸入!我可以使用你給出的步驟來變出一些東西。 – sbowde4
@ sbowde4我不知道你是否注意到,包裝器只使用一個參數 –