2017-04-11 23 views
1

私は配列= [1,2,3,4,5,6,7]を持っており、すべての要素をバイナリツリー項目にアイテムごとに挿入したい、それは次のようになりますので:項目をバイナリツリーに挿入する[PYTHON]

class Node(self): 
    def __init__(self): 
     self.value= 0 
     self.parent = None 
     self.left = None 
     self.right = None 

とクラスツリー(木そのものを表す):

class Tree(): 
    def __init__(self): 
     self.root = None 
  1 
     / \ 
     2  3 
     /\ /\ 
     4 5 6 7 

私は(各ノードを表す)クラスノードを持っています10今度は、配列を引数にとり、上で説明したようにバイナリツリーを作る関数を作る必要があります。

私はこれを管理している:

def insert(array): 
    size = len(array) 
    tree = Tree() 
    insert_node(tree.root, array, 0, size-1) 

def insert_node(tree, array, index, size): 
    node = Node() 
    if index < size: 
     node.value = array[index] 
     insert_node(node.left, array, index*2 +1, size) 
     insert_node(node.right, array, index*2 +2, size) 
    tree = node 

私はそのようなことは仕事ができると思うが、私は正しく「親」の属性を設定する方法と、ツリーにノードを割り当てる方法は考えています。

はあなたがinsert_node内側からtreeに割り当てることはできません任意のアドバイス

答えて

-1
def insert(array): 
     size = len(array) 
     tree = Tree() 
     tree.root = insert_node(tree.root, array, 0, size-1) 
     print(PreOrder(tree.root)) 


def insert_node(tree, array, index, size): 
    node = Node() 
    if index < size: 
     node.value = array[index] 
     node.left = insert_node(node.left, array, index*2 +1, size) 
     node.right= insert_node(node.right, array, index*2 +2, size 
    return node 
def PreOrder(self): 
    if self is not None: 
     print(self.key) 
     PreOrder(self.left) 
     PreOrder(self.right) 

これが返されます。

0 
None 
+0

これは答えではありません。 –

+0

確かに。それはあなたが私にアドバイスしたものです。 – marvin

+0

私の答えを読んでください。 –

1

いただきありがとうございます。さて、ですが、引数は変更されません。

代わりにinsert_nodeを作成してNodeを返します。これにより、発信者は必要な場所に発信者を置くことができます。あなたが呼び出された時間である毎にinsert_nodeから返された値を割り当てると仮定すると、これはあなたの親と木の割り当て問題を解決します。

+0

をですから、 '(insert_node' 'しばらくtree.root = insert_node(tree.root、配列、0、サイズ-1)')のようなinsert_node'を呼び出すことをお勧め: ... return node'? – marvin

+0

私が書いたことを解釈する別の方法はありますか? –

+0

さて、in_orderを使って結果のツリーを印刷しようとしました。そして、それは本当に私が期待したものを返さなかった。 – marvin

関連する問題