我正在嘗試編寫一個代碼,該代碼在二進制搜索樹根和級別下打印出該級別樹的元素。這是工作的罰款:但是無法以相反順序在給定級別打印BST的元素
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)
來吧,我當然能做到這一點!我想知道的是爲什麼代碼不工作! – SexyBeast
你能提供初始化樹的代碼嗎?在這種情況下,至少可以進行測試。 –
我可以,但在這裏幾乎沒有必要。每個節點有三個屬性 - 「左」,「右」和「數據」。我使用root和level調用函數:'revprint(root,level)'。 – SexyBeast