Представление Inorder Traversal

Я работаю над обходом Inorder для моего дерева двоичного поиска, и мне было интересно, есть ли способ распечатать содержимое моего обхода Inorder в одной строке.

Так, например, допустим, я хочу, чтобы он получился как [ -1, 1, 3, 6, 8, 10, 14, 90] вместо того, как это происходит на самом деле, если один за другим. Просто ищу способы, чтобы результат выглядел лучше. Если у вас есть предложения, дайте мне знать. Я попробовал несколько вещей, но они, кажется, не работают.

def __in_order(self, root):
    if root == None:
        return
    else:
        self.__in_order(root.left_child)
        print(str(root.value))
        self.__in_order(root.right_child)

1 ответ

Решение

Использование yield а также yield from лениво производить значения в порядке.

class Tree:
    def in_order(self):
        if self.__root:
            yield from self.__in_order(self.__root)

    def __in_order(self, root):
        if root:
            yield from self.__in_order(root.left_child)
            yield str(root.value)
            yield from self.__in_order(root.right_child)

Вы можете использовать list преобразовать все полученные значения в список и распечатать его.

print(list(tree.in_order()))

yield from это питон 3.3 или выше. Если вы находитесь на более низкой версии, вы можете просто использовать цикл и yield каждое значение.

т.е.

for v in self.__in_order(root.left_child):
    yield v
Другие вопросы по тегам