私は、バイナリ検索ツリーのルートとレベルを指定して、そのレベルでツリーの要素を出力するコードを作成しようとしています。これは正常に機能しています。
def myprint(root,level):
if root:
if not level:
print root.data,
else:
myprint(root.left,level-1)
myprint(root.right,level-1)
ただし、要素を逆の順序で印刷するように微調整しようとすると、機能しません。次のツリーの場合:
26
/ \
13 39
/ \ / \
6 19 32 51
/ \ / \ / \ / \
4 8 14 31 33 68
\
17
レベル3(ルートのレベルは0)の要素を右から左に出力する場合、出力はになります68 33 31 14 8 4
。上記のコードは逆を正しく実行します。つまり、を出力し4 8 14 31 33 68
ます。ただし、以下のコードは逆の順序を正しく出力せず、31 33 68 4 8 14
代わりに出力します。
def revprint(root,level):
if root:
if not level:
print root.data,
else:
myprint(root.right,level-1)
myprint(root.left,level-1)
誰かがエラーを見つけて、それを修正する方法を教えてもらえますか?ツリーを初期化するためのコードは次のとおりです。
class tree:
def __init__(self,data):
self.data = data
self.successor,self.left,self.right = None,None,None
def push(self,data):
root = self
while root:
oldroot = root
if root.data > data:
root = root.left
elif root.data < data:
root = root.right
if data > oldroot.data:
oldroot.right = tree(data)
else:
oldroot.left = tree(data)
a = tree(26)
for x in [13,39,6,19,4,8,5,10,9,14,17,15,32,51,68,31,33,36,34]:
a.push(x)