Вот ваш данный термин, довольно напечатанный для ясности:
tree(1, % has 2 child nodes
tree(11, % has 2 child nodes
tree(111,n,n), % a leaf
tree(112, % has 2 child nodes
tree(1121,n,n), % a leaf
n)), % empty
tree(12, % has 4 child nodes
tree(121,n,n), % a leaf
tree(122,n,n), % a leaf
tree(123,n,n), % a leaf
tree(124, % has two child nodes
tree(1241,n,n), % a leaf
tree(1242,n,n)))) % a leaf
Понятно, что "цифры" 1
, 11
, 12
, ..., 1242
arenне используется для их числового значения, но так же, как в качестве замены.Другими словами, значения не важны.Действительное дерево уже построено.
Каждый из узлов этого дерева имеет либо 2 , либо 4 дочерние узлы (возможно, пустые, обозначенные n
).Вот почему оно считается деревом 2-3-4 , где каждому узлу разрешено иметь 2 , 3 или 4. дочерние узлы (возможно, пустые).
Тогда ваш вопрос становится, учитывая, что дерево 2-3-4 представлено сложным термином Пролог, подобным приведенному выше, напечатайте дерево в хорошем визуальном стилекак показано на прилагаемом изображении.
Это достигается простым обменом печати вложенных поддеревьев с печатью значения узла:
print_tree( n ).
print_tree( tree(A,B,C) ) :- print_tree(B),
print_node_value(A),
print_tree(C).
print_tree( tree(A,B,C,D) ) :- print_tree(B),
print_node_value(A),
print_tree(C),
print_tree(D).
print_tree( tree(A,B,C,D,E) ) :- print_tree(B),
print_tree(C),
print_node_value(A),
print_tree(D),
print_tree(E).
Вам придется увеличить это напередавая желаемый уровень отступа и увеличивая его на ту же величину при печати дочерних узлов.