這裏有兩個問題,其中有照顧,一旦他們已經從average
計算返回值做。
首先,在您的代碼中,唯一的return
語句將返回非數字None
值。這是一個問題,因爲當你得到沒有兩個子節點的節點時(例如一個葉節點),tree['left']
或/和tree['right']
將返回None
。此None
傳遞給average
,返回None
。你得到的錯誤是由於後續嘗試在函數的第三行添加這個返回的值。爲了解決這個問題,你可以簡單地返回一個「基本情況」值,以表示空的樹的「平均值」應該是多少。
其次,即使在average
遞歸調用不是None
子節點上的情況下,average
將仍然返回None
因爲沒有在功能上沒有其他return語句,並在Python當評估到達沒有返回語句的函數的結尾有一個隱含的返回None
。要解決這個問題,只需返回你計算的total
!
修復這兩個問題看起來可能像下面這樣:
def average(tree):
if tree is None:
return 0
total = tree['data'] + average(tree['left']) + average(tree['right'])
return total
雖然我不能肯定地說,在基本情況下返回零是最適合正是你所要完成的任務。
作爲最後一點,您可能希望添加tree['data']
不是None
的檢查來排除節點沒有數據的邊緣情況!
裸'返回'返回'無',所以你的支票基本上是無用的。也許返回一個默認的_integer_值,比如「0」。另外,它應該是'如果樹是None:'用'is'而不是'=='。 –
你還需要'返回total'。另外,建議你不要使用'sum'作爲你的函數名,它隱藏了python的內置'sum'。 – AChampion
@Christian Dean爲什麼不是'=='甚至是'不是'? –