如何在prolog中獲取謂詞以返回值?檢查樹是否是最小堆
我需要找到一個樹的節點,並檢查它是否是最小堆。 我猜它是這樣的: -
getnode(tree(_, node, _), node).
我到目前爲止的代碼是這樣
minheap(tree(L, Node, empty)) :-
getnode(L, Val),
Node =< Val,
minheap(L).
minheap(tree(empty, Node, R)) :-
getnode(R, Val),
Node =< Val,
minheap(R).
getnode(tree(_,n,_) , n).
輸入是類型 -
minheap(tree(empty,3,tree(tree(empty,8,empty),5,tree(empty,7,empty)))).
輸出的應該是真實的。
「tree/3」的格式是什麼? '樹(左,價值,右)'? –
是的,這是正確的 –
如果節點的值小於(或至少不大於)所有子節點的值(通常是:兩者)子節點_and_所有以子節點爲根的子樹,那麼以節點爲根的樹就是最小堆也是最小的堆。你的代碼能夠測試給定節點的_all_子節點嗎? – CiaPan