ETE2 - один дочерний узел с несколькими родителями?

Я пытаюсь создать дерево с помощью модуля ETE2 в Python. Я хотел бы добавить 1 дочерний узел к 2 родительским узлам, чтобы они оба подключались к дочернему узлу при отображении дерева. Я новичок в ETE, поэтому, пожалуйста, прости меня, если это простой вопрос. Код:

from ete2 import Tree, TreeNode, TextFace


classes = Tree()

#adding 1
course1 = TreeNode(name="Course 1")
face1 = TextFace(text="Course 1")
course1.add_face(face1, column=1)
classes.add_child(child=course1)

#adding 2
course2 = TreeNode(name="Course 2")
face2 = TextFace(text="Course 2")
course2.add_face(face2, column=1)
course1.add_child(child=course2)

#adding 3
course3 = TreeNode(name="Course 3")
face3 = TextFace(text="Course 3")
course3.add_face(face3, column=1)
#adding course3 to 2 parents
course1.add_child(child=course3)
course2.add_child(child=course3)

classes.show()

Выход Вот

Я принципиально иду против идеи дерева здесь? Есть ли у ETE простой (r) способ сделать то, что я предлагаю?

Дайте мне знать, если вам нужна дополнительная информация, чтобы помочь.

1 ответ

Решение

Я по сути разобрался с ответом на свой вопрос: структура данных, которую я должен использовать, не является деревом. @boardrider отметил, что дерево по своей сути является структурой "один ко многим", отображающей один родительский узел одному или нескольким дочерним элементам.

Решением стал направленный ациклический граф. Это разновидность структуры данных графа, которая отображает "многие ко многим" для продолжения приведенной выше фразы.

Ресурсы:

Основы структуры данных графика

Python-специфичные графовые структуры

Я буду редактировать это по мере продвижения.

Другие вопросы по тегам