Я пытаюсь выполнить вертикальный обход порядка в двоичном дереве, например:
1
/ \
2 3
/ \ / \
4 6 7 8
\ / \
5 9 10
Прежде всего, я использую обход предварительного заказа, а затем создаю карту ha sh для хранения горизонтального расстояния узлов из root.
Расстояние по горизонтали означает, что левая часть из root будет считаться -1, -2 и так далее. Подобно отрицательной оси X, где root - начало координат и начинается с 0. Таким образом, узлу 2 будет присвоено значение -1, 4 - значение -2. Однако 1,6,7 будет дано 0, поскольку они находятся не далеко от узла root, а l ie в той же позиции. и вправо, расстояние станет положительным, так что 3 будет иметь расстояние 1, 8 получит 2 и т. д.
Я ожидаю получить отношение расстояние: узел как: {0: [1,6,7] , -1: [2,5], -2: 4, 1: [3,9], 2: 8, 3:10}, но я получаю такой вывод:
Node : Distance
1 0
2 -1
4 -2
5 -1
6 1
3 3
7 2
8 4
9 3
10 5
Мой код следующим образом:
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def vertical_traversal(root):
current = root
stack = []
hd = {} // map
k = 0
while True:
if current is not None:
stack.append(current)
hd.setdefault(k, [])
hd[k].append(current.data)
current = current.left
k += -1
elif stack:
k += 1
current = stack.pop()
current = current.right
if current:
k += 1
else:
break
return hd
Я, конечно, думаю, что проблема в 'k', но я не знаю, как ее обойти.