我假设您想要一个平面列表,而不是一个元组作为您的答案。第一个问题是
BinRoot(T), BinPreOrder(Left(T)), BinPreOrder(Right(T))
是一个包含三个元素的元组,而不是一个列表。递归调用也将返回元组,因此您将结束一个元组的元组。
第二个问题是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 ,而是让它返回一个空列表。然后你可以连接三个列表。我专注于解决您的代码的问题,而不是考虑问题本身。对不起
def BinPreOrder(T):
if Is_EmptyBinTree(T): return []
return [BinRoot(T)] + BinPreOrder(Left(T)) + BinPreOrder(Right(T))