2011-09-05 65 views
2

我想編寫一個程序,告訴我,如果樹是平衡與否。在這種情況下,平衡是指同一高度或1序言 - 平衡樹或不

這是我到目前爲止已經寫的,但它不爲1,爲什麼高差工作的高度差?

balanced(l(_)). 
balanced(b(B1, B2)):- 
    height(B1,H), 
    height(B2,H), 
    balanced(B1), 
    balanced(B2). 

balanced(b(B1,B2)):- 
    height(B1,H + 1), 
    height(B2,H), 
    balanced(B1), 
    balanced(B2). 

balanced(b(B1,B2)):- 
    height(B1,H), 
    height(B2,H + 1), 
    balanced(B1), 
    balanced(B2). 

回答

1

H + 1不計算到的H加一,如果你不告訴Prolog的做算術評估值;相反,Prolog的建立與+作爲函子和H1作爲參數的期限。 (嘗試H + 1 =.. L和檢查L值說服這個事實你自己。)

不喜歡

height(B1, H1), 
height(B2, H2), 
abs(H1 - H2) =< 1. 

=<事情會執行算術評估。

+0

如果我嘗試你的建議我tree6(B(B(L(1),B(L(2),B(L(3),B(L(4),L(5))))) b(l(6),b(l(7),b(l(8),b(l(9),l(10)))))))根據代碼進行平衡,是。 – user940599

+0

@Josie,忘記了調用abs函數。 –

+0

你還必須檢查子樹。 – starblue