2012-03-13 47 views
0

我需要編寫一個函數,我需要返回樹葉的列表。使用遞歸打印樹葉的列表

因此,對於這個樹:

 1 
    2  3 
4  5  6 

這應該打印[4,5,6]

下面是我想出這麼遠。我似乎無法找到如何回到功能。它只打印[4]

def fringe(root): 

    if root.left: 
     return fringe(root.left) 
    elif root.right: 
     return fringe(root.right) 
    else: 
     return [root.key] 

任何輸入?

+0

需要更多的清除 – 2012-03-13 21:26:30

回答

4

使用yield創建一個發電機:

def fringe(root): 

    if root.left or root.right: 
     if root.left: 
      for key in fringe(root.left): 
       yield key 
     if root.right: 
      for key in fringe(root.right): 
       yield key 
    else: 
     yield root.key 

print list(fringe(mytree)) 

在Python中的新版本,而不是

for key in fringe(root.left): 
    yield key 

您可以使用:

yield from fringe(root.left) 
+1

這個想法是正確的,但這也行不通。這將會向左或向右移動,或者產生當前節點。 – 2012-03-13 21:29:56

+0

你死了,修好了。 (在修改代碼之前沒有檢查他的邏輯) – bluepnume 2012-03-13 21:32:30

+0

請注意,「更新版本的Python」是指當前的開發中繼。沒有發佈的版本支持''收益率'呢。 – 2012-03-13 22:08:06

1

這並不因爲工作如果你已經離開了葉子,那麼你根本看不到正確的葉子。嘗試這一個

def fringe(root): 
    result = [] 
    if root.left: 
     result.extend(fringe(root.left)) 
    if root.right: 
     result.extend(fringe(root.right)) 
    if not result: 
     result = [root.key] 
    return result