我开发了一个二叉搜索树结构,我想添加一些可以可视化树的功能。下面的代码属于二叉搜索树:
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 结构中创建变量,那么我将能够获得树的可视化表示。
为此,程序必须
1. 以 RLV 格式遍历树。
2. 在遍历过程中,必须使用()
, ,
和;
。
谁能帮我完成代码。
如果有人有任何更简单的方法来可视化 BST,我将非常感激。
感谢你们。