答えとしてタプルのタプルではなく、フラットリストが必要だと思います。一番の問題は、
BinRoot(T), BinPreOrder(Left(T)), BinPreOrder(Right(T))
リストではなく、3 つの要素を持つタプルです。再帰呼び出しでもタプルが返されるため、タプルのタプルを終了します。
2 番目の問題は、結果に がすべて出現None
することです。何人かがすでに指摘しているように、Python 関数は常にデフォルトで None を返すため、明示的にNone
's を避ける必要があります。
次のようなことを試してください:
def BinPreOrder(T):
if not Is_EmptyBinTree(T):
answer = [BinRoot(T)]
left = BinPreOrder(Left(T))
if left is not None:
answer.extend(left)
right = BinPreOrder(Right(T))
if right is not None:
answer.extend(right)
return answer
編集:これを行うには、より短く、より明確な方法があります。空のサブツリーに対して None を返す代わりに、空のリストを返すようにします。次に、3 つのリストを連結するだけです。問題自体について考えるのではなく、コードの問題に対処することに集中していました。ごめん
def BinPreOrder(T):
if Is_EmptyBinTree(T): return []
return [BinRoot(T)] + BinPreOrder(Left(T)) + BinPreOrder(Right(T))