二分探索ツリー構造を開発しました。ツリーを視覚化できる関数を追加したいと思います。以下のコードは二分探索木に属します:
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 を視覚化するための簡単な方法があれば、ぜひご覧ください。
君たちありがとう。