Доброго времени суток, помогите пожалуйста с доработкой программы.
Задача заключается в поиске уровня максимального элемента в дереве (ниже приведён код рабочей программы). Проблема в том, что по коду мы проходим дерево два раза в поиске максимального элемента (max_n) и в поиске уровня того же элемента (find_tree).
Необходимо как-то запомнить уровень элемента уже в поиске максимального.
domains
treetype = tree(integer, treetype, treetype); empty
predicates
max_n(treetype, integer)
max(integer,integer,integer)
find_tree(treetype,integer,integer)
clauses
max(M,N,N) :- N>=M, !.
max(M,N,M) :- M>=N, !.
max_n(tree(X,empty,empty),X) :- !.
max_n(tree(X,empty,R),Q) :- max_n(R,N), max(X,N,Q).
max_n(tree(X,L,empty),Q) :- max_n(L,N), max(X,N,Q).
max_n(tree(X,L,R),Q) :- max_n(L,LM), max_n(R,RM), max(RM,LM,QM), max(X,QM,Q).
find_tree(tree(N,_,_),N,0):-!.
find_tree(tree(_,L,_),X,K):-
find_tree(L,X,K1),
K=1+K1.
find_tree(tree(_,_,R),X,K):-
find_tree(R,X,K1),
K=1+K1.
goal
T=tree(3,tree(4,tree(5,empty,tree(6,empty,tree(1,empty,empty))),tree(7,empty,empty)),tree(8,empty,empty)),
max_n(T,M),
write("Max:", M),nl,
find_tree(T,M,K), write(M, " na ",K," urovne"),nl.