Незнайка ничего о Visual Prolog, но в обычном Прологе, я сделаю что-то вроде следующего ...
Во-первых, я бы обозначить пустой ВТКЕЕ как атом btree
и представляют собой непустое ВТКЕЕ как структура арностью 3, таким образом:
btree(Payload, LeftChildren, RightChildren)
, где Payload
представляет данные для узла (целое число, по-видимому), с LeftChildren
и RightChildren
являясь btrees, представляющие, соответственно, левого и правого потомков текущего узла ,
Обход дерева для подсчета узлов с четными узлами прост. Общий предикат имеет arity 2, принимая структуру [bound] btree, подлежащую исследованию, и связанное или несвязанное значение, представляющее количество четных элементов. Он называет внутренний, рекурсивный «хелперный» предикат, который ходит по дереву и развивает счет.
count_even(T , N) :- count_even(T , 0 , N) .
Внутренний предикат также прост. Имея arity 3, первый аргумент - это дерево, которое нужно изучить, второе - это аккумулятор, а третий - конечный счет (который не будет унифицирован до самого конца). Возможны два случая.
Если дерево пусто, то есть окончательный подсчет:
count_even(btree , N , N) .
Если дерево не пусто, мы рассматриваем текущий узел, а затем рекурсивно проходят левые и правые дочерние дерева , таким образом:
count_even(btree(V , L , R) , T , N) :-
is_even(V , X) ,
T1 is T+X ,
count_even(L , T1 , T2) ,
count_even(R , T2 , N )
.
нам также необходим тривиальный помощник, чтобы сказать нам о том, четном или нечетном конкретное значение:
is_even(V , 1) :- 0 is V mod 2 , ! .
is_even(V , 0) .
Следует отметить, что структура данных вы используете не б-дерево, само по себе: это бинарное дерево.
B-деревья - это нечто вроде обобщенного сбалансированного по высоте двоичного дерева, оптимизированного для хранения на диске. Каждый узел имеет переменное количество ключей и переменное количество детей (соответствующее количеству ключей).Для получения дополнительной информации см
Вот картина B-дерева:
![B-Tree Visualization](https://i.stack.imgur.com/YzBQA.png)
И картина двоичном Дерево:
![Binary Tree Visualization](https://i.stack.imgur.com/rdd2e.gif)
Почему вы используете Visual Prolog? – src
Из-за требований работы. Это дополнительная трудность? – mkll
Визуальный пролог - это не совсем пролог. В любом случае, знаете ли вы, как проверить, является ли число четным? – src