リストに保存せずにノード値間の最大差を計算する方法はありますか? 1回でやりたいと思っていたのですが、無理そうです。これは、ノードの最大絶対差として定義されるバイナリ ツリーの振幅を計算するための codility インタビューの質問からのものです。
def max_diff(nodes):
return abs(max(nodes) - min(nodes))
def amplitude(T):
nodes = []
def calc_amplitude(T, nodes):
if not isinstance(T, tuple):
if not isinstance(T, int):
return 0
nodes.append(T)
return T
else:
[calc_amplitude(t, nodes) for t in T]
return max_diff(nodes)
return calc_amplitude(T, nodes)
tree = (5, (8, (12, None, None), (2, None, None)),(9, (7, (1, None, None), None), (4, (3, None, None), None)))
print amplitude(tree)