Есть ли способ вычислить максимальную разницу между значениями узлов без сохранения в списке? Я надеялся сделать это за 1 проход, но это не представляется возможным. Это было связано с вопросом собеседований для вычисления амплитуды двоичного дерева, определяемого как максимальная абсолютная разница узлов.Вычислить максимальную разницу между узлами в двоичном дереве
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)
Является ли амплитуда максимальной разницей между всеми узлами в дереве или максимальной разницей между двумя узлами на любом пути от корня до листа? См. Http://siyang2notleetcode.blogspot.my/2015/02/amplitude-of-tree.html для объяснения – niemmi
thx - Я предполагаю, что это показывает подход. Я также вижу, что я не уважаю правильность пути к узлу. Забавно, что решение codays было запрошено удалить из кодовости. –