Avinash Koneru:
from collections import deque
class Node(object):
def __init__(self,val):
self.value = val
self.right = None
self.left = None
class Btree:
def __init__(self):
self.root = None
def btree_print(self):
if self.root:
print("Values of btree are")
q = deque()
q.append(self.root)
q.append(None)
while q:
parent = q.popleft()
if parent is None:
print("End of a Level")
if q:
q.append(None)
continue
print("Value of btree Elm:", parent.value)
for child in {parent.left, parent.right}:
if child:
q.append(child)
else:
print("Btree Empty")
def btree_insert_helper(self, val):
q = deque()
q.append(self.root)
while q:
node = q.popleft()
for child in {node.left, node.right}:
if child:
q.append(child)
elif node.left:
node.right = Node(val)
return
else:
node.left = Node(val)
return
def btree_insert(self, val):
if self.root:
self.btree_insert_helper(val)
else:
self.root = Node(val)
btree = Btree()
btree.btree_insert(1)
btree.btree_insert(2)
btree.btree_insert(3)
btree.btree_insert(4)
btree.btree_insert(5)
btree.btree_insert(6)
btree.btree_insert(7)
btree.btree_print()
上記のプログラムでは、場合、私はそれは私に異なる結果を与えることだ、それを複数回実行します。私は2つの異なる命令を見ています。かかわらず、ロジックの、結果はそのシングルスレッドプログラムとして、常に同じでなければなりません。私は順序が変更されている理由はわかりません。
期待される結果、Order1:
Values of btree are
Value of btree Elm: 1
End of a Level
Value of btree Elm: 2
Value of btree Elm: 3
End of a Level
Value of btree Elm: 4
Value of btree Elm: 5
Value of btree Elm: 6
Value of btree Elm: 7
End of a Level
予想時にはプログラムは、その結果、以下与えていない(4、5、4、5にひっくり返される)、Order2:
Values of btree are
Value of btree Elm: 1
End of a Level
Value of btree Elm: 2
Value of btree Elm: 3
End of a Level
Value of btree Elm: 5
Value of btree Elm: 4
Value of btree Elm: 6
Value of btree Elm: 7
End of a Level
任意の助けをいただければ幸いです
デイビット・バック:
バイナリツリー自体は一貫しています。お使いのプリント注文が矛盾している理由は、ラインから来ています:
for child in {parent.left, parent.right}:
これは、Aを反復処理されるset
の{parent.left, parent.right}
。あなたはどちらか右か、右クリック、左、左反復することができるように設定し、オーダーを持っていません。
それを変更します:
for child in (parent.left, parent.right):
それは一貫して印刷するようになります。