0

二分探索ツリー構造を開発しました。ツリーを視覚化できる関数を追加したいと思います。以下のコードは二分探索木に属します:

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 を視覚化するための簡単な方法があれば、ぜひご覧ください。
君たちありがとう。

4

3 に答える 3

0
  1. レベル順でツリーをトラバースする必要があります。
  2. ノードの長さスペースの長さを選択します。
  3. である各レベルに対するツリーのベース幅を取得します。node_length * nodes_count + space_length * spaces_count*
  4. 分岐、間隔、くぼみ、および計算されたベース幅の間の関係を見つけます。

GitHub のコード: YoussefRaafatNasry/bst-ascii-visualization

                                             07                     
                                             /\                     
                                            /  \                    
                                           /    \                   
                                          /      \                  
                                         /        \                 
                                        /          \                
                                       /            \               
                                      /              \              
                                     /                \             
                                    /                  \            
                                   /                    \           
                                 03                      11         
                                 /\                      /\         
                                /  \                    /  \        
                               /    \                  /    \       
                              /      \                /      \      
                             /        \              /        \     
                           01          05          09          13   
                           /\          /\          /\          /\   
                          /  \        /  \        /  \        /  \  
                        00    02    04    06    08    10    12    14
于 2019-07-19T14:30:29.870 に答える