У меня есть, возможно, большая корневая древовидная структура, которую я хочу преобразовать в матрицу X * Y
, где X
— количество листьев в дереве, а Y
— количество узлов в дереве со степенью больше 1, т. е. корневой узел и внутренний узлы. Матрица должна быть заполнена следующим образом:
Mi,j = { 0
, если лист i
имеет предка j
, 1 в противном случае
Например, это дерево:
--A
/
1 B
/ \ /
/ 3
/ \
0 C
\
\ --D
\ /
2
\--E
переведет в эту матрицу:
0 1 2 3
A T T F F
B T T F T
C T T F T
D T F T F
E T F T F
Поскольку деревья могут стать довольно большими (возможно, около 100 000 листьев), мне было интересно, есть ли более умный/быстрый способ сделать это, чем обход дерева для каждого из листовых узлов. Такое чувство, что где-то в этой задаче есть какой-то алгоритм, но я пока не разобрался. Может быть, кто-то может помочь?
В моем приложении дерево представляет большие филогенетические иерархии, поэтому оно не сбалансированы, и могут быть узлы с более чем двумя дочерними узлами.