2015-07-23 4 views
2

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

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

Выход here

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

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

+1

'Я принципиально против идеи дерева здесь: да. То, что вы хотите, это * не * дерево. См. Https://en.wikipedia.org/wiki/Tree_(data_structure) для определения дерева. – boardrider

+0

@boardrider Итак, какую структуру я должен использовать? – user2740614

+1

Вы можете использовать структуру, которую используете сейчас, просто не назовите ее 'tree.' – boardrider

ответ

1

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

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

Ресурсы:

Graph data structure basics

Python specific graph structures

я редактировать это как я прогрессировать.