es gibt zwei Probleme hier, die mit der Betreuung zu tun haben Werte zurückzukehren, sobald sie von average
berechnet wurden.
Zuerst wird in Ihrem Code die einzige return
Anweisung den nicht numerischen None
Wert zurückgeben. Dies ist ein Problem, wenn Sie einen Knoten ohne zwei untergeordnete Knoten (z. B. ein Blatt) erhalten, tree['left']
oder/und tree['right']
wird None
zurückgegeben. Diese None
wird an average
übergeben, die None
zurückgibt. Der Fehler, den Sie erhalten, ist darauf zurückzuführen, dass Sie versuchen, diesen zurückgegebenen Wert in der dritten Zeile der Funktion hinzuzufügen. Um dies zu beheben, können Sie einfach einen "Basisfall" -Wert für den "Mittelwert" eines leeren Baums zurückgeben.
Zweitens, selbst in dem Fall, in den average
rekursiv auf einem untergeordneten Knoten aufgerufen wird, die nicht None
ist, average
wird noch Rückkehr None
denn da es keine andere Anweisung return in der Funktion und in Python, wenn Auswertung erreicht die Ende einer Funktion ohne eine return-Anweisung gibt es eine implizite Rückgabe von None
. Um dies zu beheben, geben Sie einfach die total
zurück, die Sie berechnet haben!
Fixing diese beiden Probleme wie folgt aussehen könnte:
def average(tree):
if tree is None:
return 0
total = tree['data'] + average(tree['left']) + average(tree['right'])
return total
obwohl ich nicht mit Sicherheit sagen kann, dass die Null in dem Basisfall Rückkehr ist das Beste für genau das, was Sie versuchen zu erreichen.
Als letzte Anmerkung möchten Sie vielleicht eine Überprüfung hinzufügen, dass tree['data']
nicht None
ist, um Kantenfälle auszuschließen, bei denen Knoten keine Daten haben!
Das leere 'return' gibt' None' zurück, so dass Ihr Check im Grunde nutzlos ist. Vielleicht geben Sie einen Standardwert _integer_ zurück, z. B. "0". Außerdem sollte es 'wenn Baum keine ist:' mit 'ist' und nicht mit' == '. –
Sie müssen auch 'total zurückgeben'. Außerdem empfehlen wir Ihnen, 'sum' nicht als Funktionsnamen zu verwenden, es verbirgt Pythons eingebaute' summe'. – AChampion
@Christian Dean warum nicht '==' oder gar 'nicht'? –