Я разработал двоичную структуру дерева поиска и хочу добавить некоторую функцию, которая может визуализировать дерево. Код ниже принадлежит двоичному дереву поиска:
class Node(object):
def __init__(self, data):
self.data = data
self.leftChild = None
self.rightChild = None
def insert(self, data):
if data < self.data:
if not self.leftChild:
self.leftChild = Node(data)
return True
else:
self.leftChild.insert(data)
else:
if not self.rightChild:
self.rightChild = Node(data)
return True
else:
self.rightChild.insert(data)
def inOrder(self):
"""
Traversing the tree in inorder form (LVR).
"""
if self:
if self.leftChild:
self.leftChild.inOrder()
print(self.data)
if self.rightChild:
self.rightChild.inOrder()
class BST(object):
def __init__(self):
self.rootNode = None
def insert(self, data):
if not self.rootNode:
self.rootNode = Node(data)
else:
self.rootNode.insert(data)
def inOrder(self):
self.rootNode.inOrder()
вы можете протестировать код, чтобы увидеть, как он рекурсивно обходит дерево:
bst = BST()
bst.insert(12)
bst.insert(14)
bst.insert(8)
bst.insert(11)
bst.insert(7)
bst.inOrder()
Для визуализации я использовал библиотеку ete
. В библиотеке ete3
, если вы используете код ниже:
from ete3 import Tree
# Loads a tree. Note that we use format 1 to read internal node names
tree_format = '(((J)H,K)D,((S,E)A,(T)B)C)F;'
t = Tree(tree_format, format=1)
print( t.get_ascii())
вы получите такой вывод:
/H /-J
/D|
| \-K
-F|
| /-S
| /A|
\C| \-E
|
\B /-T
Как вы можете видеть в приведенном выше коде, если бы я мог создать переменную tree_format
из структуры BST, тогда я смог бы получить визуальное представление дерева.
Чтобы сделать это, программа должна < br/> 1. Обход дерева в формате RLV.
2. во время обхода он должен использовать ()
, ,
и ;
.
Может ли кто-нибудь помочь мне завершить код.
Если кто-нибудь есть более простой способ визуализации BST, я был бы очень благодарен увидеть.
Спасибо, ребята.