Как создать неидеальное двоичное дерево с DiagrammeR?
Я использую diagrammeR
библиотека в R для создания и рендеринга бинарных деревьев. Я нахожу его очень простым в использовании, и он создает высококачественные рендеры. Однако создание дерева, которое не полностью (идеально), генерирует грязные рендеры.
Вот что я получаю, когда у моего дерева 16 листьев (h = 4
): Полностью бинарное дерево
Для ясности, каждая метка узла - это имя строки узлов data.frame, которая указывает последовательность узлов, переданных в граф:
nodes$label = rownames(nodes)
И вот что я получу, если добавлю один узел [32] из узла [31] - вручную или add_node()
а также add_edge()
функции: неидеальное бинарное дерево
Как видите, все идет не так, как надо. Я хотел бы иметь узел [32] непосредственно под узлом [31] с краем прямой вертикальной линии. Это возможно даже с этой библиотекой? Я не могу понять правильный порядок узлов в узлах data.frame.
Вот как выглядит мой полный код:
library(DiagrammeR)
from = c(1, 1, 2, 2, 3, 3, 4, 4, 7, 7, 10, 10, 11, 11, 14, 14, 17, 17, 18, 18, 19, 19, 22, 22, 25, 25, 26, 26, 29, 29)
to = c(2, 17, 3, 10, 4, 7, 5, 6, 8, 9, 11, 14, 12, 13, 15, 16, 18, 25, 19, 22, 20, 21, 23, 24, 26, 29, 27, 28, 30, 31)
h=4
n = 2^(h+1)-1
edges = data.frame(from, to)
nodes = data.frame(id = 1:n, label=1:n, shape='circle')
g1 = create_graph(nodes, edges)
render_graph(g1, layout='tree', title='g1')
# add node [32] and edge [31-32]
edges2 = rbind(edges, c(31, 32))
nodes2 = nodes
nodes2[32, 1:2] = 32
nodes2[32, 3] = 'circle'
g2 = create_graph(nodes2, edges2)
render_graph(g2, layout='tree', title='g2')