Бинарные деревья - 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.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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