Бинарное дерево, поменять местами максимальный и минимальный элементы - Prolog

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

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

Кто разбирается, помогите, нужно поменять местами максимальный и минимальный элемент дерева.
Разобрался

Решение задачи: «Бинарное дерево, поменять местами максимальный и минимальный элементы»

textual
Листинг программы
domains
treetype = tree(integer, treetype, treetype); empty
 
predicates
max_t(treetype, integer)
min_t(treetype, integer)
max(integer,integer,integer)
min(integer,integer,integer)
rep_t(treetype,integer,integer,treetype)
task(treetype,treetype)
print_t(treetype)
 
clauses
 
max(M,N,N) :- N>=M, !.
max(M,N,M) :- M>=N, !.
 
min(M,N,N) :- N<=M, !.
min(M,N,M) :- M<=N, !.
 
max_t(tree(X,empty,empty),X) :- !.
max_t(tree(X,empty,R),Q) :- max_t(R,N), max(X,N,Q).
max_t(tree(X,L,empty),Q) :- max_t(L,N), max(X,N,Q).
max_t(tree(X,L,R),Q) :- max_t(L,LM), max_t(R,RM), max(RM,LM,QM), max(X,QM,Q). 
 
min_t(tree(X,empty,empty),X) :- !.
min_t(tree(X,empty,R),Q) :- min_t(R,N), min(X,N,Q).
min_t(tree(X,L,empty),Q) :- min_t(L,N), min(X,N,Q).
min_t(tree(X,L,R),Q) :- min_t(L,LM), min_t(R,RM), min(RM,LM,QM), min(X,QM,Q). 
 
rep_t(empty,_,_,empty) :- !.
rep_t(tree(X,L,R),X,Y,tree(Y,LL,RR)) :- rep_t(L,X,Y,LL),rep_t(R,X,Y,RR).
rep_t(tree(X,L,R),Z,X,tree(Z,LL,RR)) :- rep_t(L,Z,X,LL),rep_t(R,Z,X,RR).
rep_t(tree(X,L,R),Z,Y,tree(X,LL,RR)) :- X<>Y,X<>Z,rep_t(L,Z,Y,LL),rep_t(R,Z,Y,RR).
  
task(A,B) :- max_t(A,Max), min_t(A,Min), rep_t(A,Max,Min,B).
  
print_t(empty) :- write("empty").
print_t(tree(X,L,R)) :- write("("),write(X),write(","),print_t(L),write(","),print_t(R),write(")").  
  
goal
 
task(tree(3, tree (2, tree(1, empty, empty), 
     tree(2, empty, empty)), tree(5, empty, tree(9,
     tree(8, empty, empty), empty))),R),print_t(R),nl.

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


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

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

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