我开发了一个二叉搜索树结构,我想添加一些可以可视化树的功能。 下面的代码属于二叉搜索树:有没有什么办法可以让二叉搜索树有简单的ascii可视化?
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,我会非常感激的看到。
谢谢你们。
看起来像是如果你做了反向的后序遍历,保持跟踪深度,你就知道了。当深度增加时,您添加左paren。您可以在相同深度的节点之间添加逗号,并且当深度减小时,可以添加右对齐。 –
看来,如果我使用非递归模式进行遍历,我可能会得到解决问题的线索 –