Чтобы сделать именно то, что вы хотите, вам нужно использовать ключевое слово yield (подробности для оператора yield from
здесь )
def inOrder(self, aNode):
if aNode:
yield from self.inOrder(aNode.leftChild)
yield (aNode.key, aNode.payload)
yield from self.inOrder(aNode.rightChild)
Что будет вернув генератор, вы можете «развернуть» его, используя list(inOrder(...))
У вас также может быть выделенный аргумент, который вы будете обновлять при go через:
def inOrder(self, aNode, res=[]):
if aNode:
self.inOrder(aNode.leftChild, res)
res.append((aNode.key, aNode.payload))
self.inOrder(aNode.rightChild, res)
, который будет предоставить аналогичные результаты.