Во время обхода записать в массив

Так возвращает только первое значение

  def preorder(self, node):
    if not node:
        return None
    arr = []
    arr.append(node.root)
    self.preorder(node.left)
    self.preorder(node.right)
    return arr

Ответы (2 шт):

Автор решения: SmellyNS

При каждом вызове у вас создается пустой массив arr=[]. Конечно же, у вас вернется только первый элемент, так как возврат остальных вы никуда не направляете.

Передавайте arr как аргумент в функцию.

 def preorder(self, node, arr = []):
    if not node:
        return None
    arr.append(node.root)
    arr = self.preorder(node.left, arr)
    arr = self.preorder(node.right, arr)
    return arr

Как-то примерно так. Не уверен, что именно ваш метод должен был делать, проверьте это.

→ Ссылка
Автор решения: S. Nick

Попробуйте так:

def preorder(self, node):
    if not node:
        return None
    arr = []
    arr.append(node.root)
    arr.append(self.preorder(node.left))     # + arr.append(...)
    arr.append(self.preorder(node.right))    # + arr.append(...)
    return arr
→ Ссылка