Бинарное дерево, поменять местами максимальный и минимальный элементы - Prolog
Формулировка задачи:
Кто разбирается, помогите, нужно поменять местами максимальный и минимальный элемент дерева.
Листинг программы
- domains
- number=integer
- tree=tree(number,tree,tree);empty %Объявляем структуру дерева
- predicates
- MinMax(tree,number,number). %Предикат нахождения минимального и максимального значения в дереве
- Min(number,number,number,number). %Предикат нахождения минимального значения из 3х
- Max(number,number,number,number). %Предикат нахождения максимального значения из 3х
- PrintTree(tree,number). %Предикат вывода на печать дерева
- clauses
- Min(X1,X2,X3,Min):-
- X1<X2,X1<X3,Min=X1,!;
- X2<X1,X2<X3,Min=X2,!;
- Min=X3.
- Max(X1,X2,X3,Max):-
- X1>X2,X1>X3,Max=X1,!;
- X2>X1,X2>X3,Max=X2,!;
- Max=X3.
- MinMax(tree(Value,Left,Right),Min,Max):-
- MinMax(Left,Min1,Max1),
- MinMax(Right,Min2,Max2),
- Min(Value,Min1,Min2,Min),
- Max(Value,Max1,Max2,Max).
- MinMax(empty,32767,-32768).
- PrintTree(tree(Value,Left,Right),Level):-
- write(Level,":"), write(Value),nl,
- Level_next=Level+1,
- write(" L"),PrintTree(Left,Level_next),
- write(" R"),PrintTree(Right,Level_next).
- PrintTree(empty,_).
- goal
- T=tree(3,tree(4,tree(5,empty,tree(6,empty,tree(1,empty,empty))),tree(7,empty,empty)),tree(8,empty,empty)),
- MinMax(T,Min,Max),
- write("Min:", Min),nl,write("Max:", Max),nl,
- PrintTree(T,0).
Разобрался
Листинг программы
- domains
- number=integer
- tree=tree(number,tree,tree);empty %Объявляем структуру дерева
- predicates
- MinMax(tree,number,number). %Предикат нахождения минимального и максимального значения в дереве
- Min(number,number,number,number). %Предикат нахождения минимального значения из 3х
- Max(number,number,number,number). %Предикат нахождения максимального значения из 3х
- PrintTree(tree,number). %Предикат вывода на печать дерева
- swap(tree,number,number,tree).
- clauses
- Min(X1,X2,X3,Min):-
- X1<X2,X1<X3,Min=X1,!;
- X2<X1,X2<X3,Min=X2,!;
- Min=X3.
- Max(X1,X2,X3,Max):-
- X1>X2,X1>X3,Max=X1,!;
- X2>X1,X2>X3,Max=X2,!;
- Max=X3.
- MinMax(tree(Value,Left,Right),Min,Max):-
- MinMax(Left,Min1,Max1),
- MinMax(Right,Min2,Max2),
- Min(Value,Min1,Min2,Min),
- Max(Value,Max1,Max2,Max).
- MinMax(empty,32767,-32768).
- swap(tree(Value_IN,Left_IN,Right_IN),Min,Max,tree(Value_OUT,Left_OUT,Right_OUT)):-
- Value_IN=Min,Value_OUT=Max,swap(Left_IN,Min,Max,Left_OUT),swap(Right_IN,Min,Max,Right_OUT);
- Value_IN=Max,Value_OUT=Min,swap(Left_IN,Min,Max,Left_OUT),swap(Right_IN,Min,Max,Right_OUT);
- Value_OUT=Value_IN,swap(Left_IN,Min,Max,Left_OUT),swap(Right_IN,Min,Max,Right_OUT).
- swap(empty,_,_,empty).
- PrintTree(tree(Value,Left,Right),Level):-
- write(Level,":"), write(Value),nl,
- Level_next=Level+1,
- write(" L"),PrintTree(Left,Level_next),
- write(" R"),PrintTree(Right,Level_next).
- PrintTree(empty,_).
- goal
- clearwindow,
- T=tree(3,tree(4,tree(5,empty,tree(6,empty,tree(1,empty,empty))),tree(7,empty,empty)),tree(8,empty,empty)), %Задаем явным образом исходное дерево
- MinMax(T,Min,Max),
- write("Min:", Min),nl,write("Max:", Max),nl,
- PrintTree(T,0),
- swap(T,Min,Max,T1),nl,
- PrintTree(T1,0).
Решение задачи: «Бинарное дерево, поменять местами максимальный и минимальный элементы»
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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д