Я использую бинарное дерево, описанное в этой книге решение проблем с помощью алгоритмов и структур данных< /а>
class BinaryTree:
def __init__(self,rootObj):
self.key = rootObj
self.leftChild = None
self.rightChild = None
Уже существует метод обхода предварительного порядка, определенный следующим образом.
def preorder(tree):
if tree:
print(tree.self.key)
preorder(tree.getLeftChild())
preorder(tree.getRightChild())
Я просто хочу добавить возвращаемое значение списка посещенных узлов. Так что я могу сделать что-то вроде
for i in preorder(tree):
etc...
У меня проблемы с возвратом списка из рекурсивного метода. Рекурсия останавливается, как только она достигает «возврата». Я пробовал варианты, используя
return [tree.self.key] + preorder()
Or
yield ...
Любые идеи?
preorder()
— это вспомогательная функция, а не метод классаBinaryTree
, поэтому называть ее методом немного запутанно. 2). Еслиtree
является экземпляромBinaryTree
, тоtree.self.key
неверно. 3). В Python вам редко нужны методы получения (или установки), вы просто получаете доступ к атрибутам напрямую. Например,preorder(tree.leftChild)
. - person PM 2Ring   schedule 18.04.2015