Вершины дерева - Prolog
Формулировка задачи:
написать программу для подсчета количества листьевых вершин бинарного дерева, значения которых лежат в определенном диапазоне
помогите понять какой диапазон, это то есть вершины с этими значениями?
Листинг программы
- domains
- type = integer
- tree = tree(type,tree,tree); empty
- predicates
- tree_leaves(tree,integer)
- clauses
- tree_leaves(empty,0)./* в пустом дереве
- листьев нет */
- tree_leaves(tree(_,empty,empty),1):-!./* в дереве с одним корнем -
- один лист */
- tree_leaves(tree(_,L,R),N):-
- tree_leaves(L,N1), /* N1 - количество листьев
- в левом поддереве */
- tree_leaves(R,N2),
- /* N2 - количество листьев
- в правом поддереве */
- N=N1+N2.
- goal
- Tree=tree(5,tree(3,tree(6, empty, empty),tree(4, empty, empty)),
- tree(10,tree(2, empty, empty),empty)),
- tree_leaves(Tree,N),write(N),nl.
Решение задачи: «Вершины дерева»
textual
Листинг программы
- domains
- tree=nil;t(integer,tree,tree)
- i=integer
- L=integer*
- predicates
- n(tree,L,integer,integer).
- add(L,integer,L)
- append(L,L,L)
- deleteodd(L,L)
- clauses
- add([H|T],E,[H|Result]):- add(T,E,Result).
- add([],E,[E]).
- append([], L1, L1).
- append([X|L1], L2, [X|L3]):- append(L1, L2, L3).
- n(nil,[],Min,Max).
- n(t(H,Left,Right),L,Min,Max):-H < Max, H > Min,!,n(Left,LL,Min,Max),n(Right,LR,Min,Max), append(LL,LR,LTemp), add(LTemp,H,L).
- n(t(_,Left,Right),L,Min,Max):-n(Left,LL,Min,Max),n(Right,LR,Min,Max), append(LL,LR,L).
- deleteodd([],[]):-!.
- deleteodd([_],[]):-!.
- deleteodd([HH|[_|L]],[HH|LL]):- deleteodd(L,LL),!.
- goal
- n(t(5,t(3,t(7,nil,nil),nil),t(1,t(30,t(15,nil,nil),nil),t(4,nil,nil))),L,1,10), write("L=",L),nl, deleteodd(L,IL).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д