我正在尝试编写一个代码,给定一个二叉搜索树根和一个级别,在该级别打印出树的元素。这工作正常:
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)