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

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

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

Кто разбирается, помогите, нужно поменять местами максимальный и минимальный элемент дерева.
Листинг программы
  1. domains
  2. number=integer
  3. tree=tree(number,tree,tree);empty %Объявляем структуру дерева
  4. predicates
  5. MinMax(tree,number,number). %Предикат нахождения минимального и максимального значения в дереве
  6. Min(number,number,number,number). %Предикат нахождения минимального значения из 3х
  7. Max(number,number,number,number). %Предикат нахождения максимального значения из 3х
  8. PrintTree(tree,number). %Предикат вывода на печать дерева
  9. clauses
  10. Min(X1,X2,X3,Min):-
  11. X1<X2,X1<X3,Min=X1,!;
  12. X2<X1,X2<X3,Min=X2,!;
  13. Min=X3.
  14. Max(X1,X2,X3,Max):-
  15. X1>X2,X1>X3,Max=X1,!;
  16. X2>X1,X2>X3,Max=X2,!;
  17. Max=X3.
  18. MinMax(tree(Value,Left,Right),Min,Max):-
  19. MinMax(Left,Min1,Max1),
  20. MinMax(Right,Min2,Max2),
  21. Min(Value,Min1,Min2,Min),
  22. Max(Value,Max1,Max2,Max).
  23. MinMax(empty,32767,-32768).
  24.  
  25. PrintTree(tree(Value,Left,Right),Level):-
  26. write(Level,":"), write(Value),nl,
  27. Level_next=Level+1,
  28. write(" L"),PrintTree(Left,Level_next),
  29. write(" R"),PrintTree(Right,Level_next).
  30. PrintTree(empty,_).
  31. goal
  32. T=tree(3,tree(4,tree(5,empty,tree(6,empty,tree(1,empty,empty))),tree(7,empty,empty)),tree(8,empty,empty)),
  33. MinMax(T,Min,Max),
  34. write("Min:", Min),nl,write("Max:", Max),nl,
  35. PrintTree(T,0).
Разобрался
Листинг программы
  1. domains
  2. number=integer
  3. tree=tree(number,tree,tree);empty %Объявляем структуру дерева
  4. predicates
  5. MinMax(tree,number,number). %Предикат нахождения минимального и максимального значения в дереве
  6. Min(number,number,number,number). %Предикат нахождения минимального значения из 3х
  7. Max(number,number,number,number). %Предикат нахождения максимального значения из 3х
  8. PrintTree(tree,number). %Предикат вывода на печать дерева
  9. swap(tree,number,number,tree).
  10. clauses
  11. Min(X1,X2,X3,Min):-
  12. X1<X2,X1<X3,Min=X1,!;
  13. X2<X1,X2<X3,Min=X2,!;
  14. Min=X3.
  15. Max(X1,X2,X3,Max):-
  16. X1>X2,X1>X3,Max=X1,!;
  17. X2>X1,X2>X3,Max=X2,!;
  18. Max=X3.
  19. MinMax(tree(Value,Left,Right),Min,Max):-
  20. MinMax(Left,Min1,Max1),
  21. MinMax(Right,Min2,Max2),
  22. Min(Value,Min1,Min2,Min),
  23. Max(Value,Max1,Max2,Max).
  24. MinMax(empty,32767,-32768).
  25. swap(tree(Value_IN,Left_IN,Right_IN),Min,Max,tree(Value_OUT,Left_OUT,Right_OUT)):-
  26. Value_IN=Min,Value_OUT=Max,swap(Left_IN,Min,Max,Left_OUT),swap(Right_IN,Min,Max,Right_OUT);
  27. Value_IN=Max,Value_OUT=Min,swap(Left_IN,Min,Max,Left_OUT),swap(Right_IN,Min,Max,Right_OUT);
  28. Value_OUT=Value_IN,swap(Left_IN,Min,Max,Left_OUT),swap(Right_IN,Min,Max,Right_OUT).
  29. swap(empty,_,_,empty).
  30.  
  31. PrintTree(tree(Value,Left,Right),Level):-
  32. write(Level,":"), write(Value),nl,
  33. Level_next=Level+1,
  34. write(" L"),PrintTree(Left,Level_next),
  35. write(" R"),PrintTree(Right,Level_next).
  36. PrintTree(empty,_).
  37. goal
  38. clearwindow,
  39. T=tree(3,tree(4,tree(5,empty,tree(6,empty,tree(1,empty,empty))),tree(7,empty,empty)),tree(8,empty,empty)), %Задаем явным образом исходное дерево
  40. MinMax(T,Min,Max),
  41. write("Min:", Min),nl,write("Max:", Max),nl,
  42. PrintTree(T,0),
  43. swap(T,Min,Max,T1),nl,
  44. PrintTree(T1,0).

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

textual
Листинг программы
  1. domains
  2. treetype = tree(integer, treetype, treetype); empty
  3.  
  4. predicates
  5. max_t(treetype, integer)
  6. min_t(treetype, integer)
  7. max(integer,integer,integer)
  8. min(integer,integer,integer)
  9. rep_t(treetype,integer,integer,treetype)
  10. task(treetype,treetype)
  11. print_t(treetype)
  12.  
  13. clauses
  14.  
  15. max(M,N,N) :- N>=M, !.
  16. max(M,N,M) :- M>=N, !.
  17.  
  18. min(M,N,N) :- N<=M, !.
  19. min(M,N,M) :- M<=N, !.
  20.  
  21. max_t(tree(X,empty,empty),X) :- !.
  22. max_t(tree(X,empty,R),Q) :- max_t(R,N), max(X,N,Q).
  23. max_t(tree(X,L,empty),Q) :- max_t(L,N), max(X,N,Q).
  24. max_t(tree(X,L,R),Q) :- max_t(L,LM), max_t(R,RM), max(RM,LM,QM), max(X,QM,Q).
  25.  
  26. min_t(tree(X,empty,empty),X) :- !.
  27. min_t(tree(X,empty,R),Q) :- min_t(R,N), min(X,N,Q).
  28. min_t(tree(X,L,empty),Q) :- min_t(L,N), min(X,N,Q).
  29. min_t(tree(X,L,R),Q) :- min_t(L,LM), min_t(R,RM), min(RM,LM,QM), min(X,QM,Q).
  30.  
  31. rep_t(empty,_,_,empty) :- !.
  32. rep_t(tree(X,L,R),X,Y,tree(Y,LL,RR)) :- rep_t(L,X,Y,LL),rep_t(R,X,Y,RR).
  33. rep_t(tree(X,L,R),Z,X,tree(Z,LL,RR)) :- rep_t(L,Z,X,LL),rep_t(R,Z,X,RR).
  34. 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).
  35.  
  36. task(A,B) :- max_t(A,Max), min_t(A,Min), rep_t(A,Max,Min,B).
  37.  
  38. print_t(empty) :- write("empty").
  39. print_t(tree(X,L,R)) :- write("("),write(X),write(","),print_t(L),write(","),print_t(R),write(")").  
  40.  
  41. goal
  42.  
  43. task(tree(3, tree (2, tree(1, empty, empty),
  44.      tree(2, empty, empty)), tree(5, empty, tree(9,
  45.      tree(8, empty, empty), empty))),R),print_t(R),nl.

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


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

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

11   голосов , оценка 3.727 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы