Пролог упражнение 2-3-4 дерева - PullRequest
0 голосов
/ 01 июня 2018

Мой профессор дал мне упражнение, связанное с прологом.Для достижения этой цели мне нужно построить соответствующее дерево 234:

запись (дерево (1, дерево (11, дерево (111, n, n)), дерево (112, дерево (1121, n,n), n)), дерево (12, дерево (121, n, n), дерево (122, n, n), дерево (123, n, n)), дерево (124, дерево (1241, n, n), дерево (1242, n, n)))))

Результат должен выглядеть примерно так:

enter image description here

Вы спрашиваете, в чем моя проблема?

Я изучал, что такое дерево 234, но я не понимаю, почему дерево, которое я представляю, можно считать деревом 234, я вижу числа, которые варьируются от 1 до 1242.Должно ли дерево 234 быть примерно таким?

enter image description here

1 Ответ

0 голосов
/ 01 июня 2018

Вот ваш данный термин, довольно напечатанный для ясности:

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).

Вам придется увеличить это напередавая желаемый уровень отступа и увеличивая его на ту же величину при печати дочерних узлов.

...