2013-01-22 75 views
-2

我需要實現一個非遞歸函數來確定二叉樹是否平衡。檢查二叉樹是否與迭代函數平衡?

有人嗎?

謝謝!

+2

你試過了什麼?你在尋找什麼樣的平衡點?它需要多高效? –

+0

你的問題真的不能給任何人足夠的信息給你一個答案。你有什麼嘗試?你在用什麼語言?這不會是一個家庭作業的問題,是嗎?... – Floris

+1

@弗洛伊斯每當語言沒有給出,我假設'語言不可知'算法' –

回答

4

假設由「平衡」,你的意思是「高度平衡」的AVL樹感覺,你可以存儲任意信息爲每個節點,

  • 對於後序的每個節點,
    • 如果其中一個孩子不存在,則假設其各自的身高爲0.
    • 如果兩個孩子的身高相差超過一個,那麼樹就不平衡。
    • 否則,此節點的高度是兩個孩子身高中較大的一個。
  • 如果達到了這一點,樹就是平衡的。

一種方式進行後序遍歷:在根

  • 開始
    • 如果此節點的左子存在,沒有它的高度計算,請訪問其左孩子旁邊。
    • 否則,如果此節點的右側子節點存在並且沒有計算其高度,請訪問其右側的子節點。
    • 其他
      • 計算此節點的高度,可能返回早
      • 如果此節點是不是根,下次光臨其父。
  • 如果達到了這一點,樹就是平衡的。
+0

非常感謝準確的答案。是的,我的意思是身高平衡。我在哪裏可以找到這個函數在C++中的實現? – user2000916

+0

@ user2000916你可以寫一個。關於一些實現細節 - 您可以將深度存儲爲兩個變量(訪問/未訪問,深度)或一個(如果訪問深度,則爲0,如果未訪問) –

+0

基本上我需要此實現的迭代版本:http://www.geeksforgeeks .org/how-to-determine-if-a-binary-tree-is-balanced/ – user2000916