Представление 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