Бинарные деревья - Prolog (226747)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, помогите решить задачу для друга. Бинарные деревья задаются с помощью тернарного функтора tree(Left,Root,Right), где Root - элемент, находящийся в вершине, а Left и Right - соответственно левое и правое поддерево. Пустое дерево изображается атомом nil. Следующий терм является примером более сложного дерева tree(nil, 5, tree(nil, 6, tree(tree(nil, 8, nil), 10, nil))). Напишите предикат, p(+T, ?N), который вычисляет наибольшее число N в вершинах дерева T. В приведенном примере должно получиться 10.

Решение задачи: «Бинарные деревья»

textual
Листинг программы
domains
int=integer
treetype = tree(treetype, integer, treetype); nil
 
predicates
max2(int,int,int)
max3(int,int,int,int)
p(treetype,int)
 
clauses
 
max2(M1,M2,M1) :- M1>=M2.
max2(M1,M2,M2) :- M2>=M1.
 
max3(M1,M2,M3,M1) :- M1>=M2, M1>=M3.
max3(M1,M2,M3,M2) :- M2>=M1, M2>=M3.
max3(M1,M2,M3,M3) :- M3>=M2, M3>=M1.
 
p(tree(nil,N,nil),N).
p(tree(L,N,nil),M) :- p(L,M1), max2(M1,N,M).
p(tree(nil,N,R),M) :- p(R,M1), max2(M1,N,M).
p(tree(L,N,R),M)   :- p(L,M1), p(R,M2), max3(M1,M2,N,M).
 
goal
 
p(tree(nil, 5, tree(nil, 6, tree(tree(nil, 8, nil), 10, nil))),M), write(M), nl.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

Оцени полезность:

12   голосов , оценка 4.25 из 5
Похожие ответы