Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2015, 23:05   #1
catechum3n
Новичок
Джуниор
 
Регистрация: 15.05.2015
Сообщений: 1
Вопрос Поиск уровня элемента в дереве (PROLOG)

Всем привет, помогите пожалуйста с доработкой программы.
Задача заключается в поиске уровня максимального элемента в дереве (ниже приведён код рабочей программы). Проблема в том, что по коду мы проходим дерево два раза в поиске максимального элемента (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.
catechum3n вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Prolog братья в бинарном дереве Gorgetr Помощь студентам 11 29.05.2013 09:07
Поиск элемента в дереве Фенвика. kdee Помощь студентам 0 28.01.2012 17:29
удаление элемента в бинарном дереве Kukurudza Общие вопросы C/C++ 1 26.06.2011 22:51
логическая функция same(t), определяющая, есть ли в бинарном дереве T хотя бы два одинаковых элемента 123456789igor Паскаль, Turbo Pascal, PascalABC.NET 1 30.05.2011 00:22
нахождение максимального элемента в дереве. Haskell densan Помощь студентам 4 01.06.2009 13:23