Utilizando self.xxxx como parámetro predeterminado - Python

Hola, estoy tratando de simplificar uno de mis problemas de tarea y mejorar un poco el código. Con lo que estoy trabajando es con un árbol de búsqueda binario. En este momento tengo una función en miTree() clase que encuentra todos los elementos y los coloca en una lista.

tree = Tree()
#insert a bunch of items into tree

then uso mi función makeList () para tomar todos los nodos del árbol y ponerlos en una lista. Para llamar a lamakeList() función, yo hagotree.makeList(tree.root). Para mí esto parece un poco repetitivo. Ya estoy llamando al objeto del árbol contree.entonces eltree.root es solo una pérdida de escribir un poco.

Ahora mismo la función makeList es:

    def makeList(self, aNode):
        if aNode is None:
            return []
        return [aNode.data] + self.makeList(aNode.lChild) + self.makeList(aNode.rChild)

Me gustaría hacer que la entrada aNode sea un parámetro predeterminado comoaNode = self.root (que no funciona) de esa manera podría ejecutar la función con esto,tree.makeList().

a primera pregunta es, ¿por qué no funciona eso?
a segunda pregunta es, ¿hay alguna manera de que pueda funcionar? Como puedes ver lamakeList()a función @ es recursiva, por lo que no puedo definir nada al comienzo de la función o obtengo un bucle infinito.

EDITA Aquí está todo el código solicitado:

class Node(object):
    def __init__(self, data):
        self.data = data
        self.lChild = None
        self.rChild = None

class Tree(object):
    def __init__(self):
        self.root = None

    def __str__(self):
        current = self.root

    def isEmpty(self):
        if self.root == None:
            return True
        else:
            return False

    def insert (self, item):
        newNode = Node (item)
        current = self.root
        parent = self.root

        if self.root == None:
            self.root = newNode
        else:
            while current != None:
                parent = current
                if item < current.data:
                    current = current.lChild
                else:
                    current = current.rChild

            if item < parent.data:
                parent.lChild = newNode
            else:
                parent.rChild = newNode

    def inOrder(self, aNode):
        if aNode != None:
            self.inOrder(aNode.lChild)
            print aNode.data
            self.inOrder(aNode.rChild)

    def makeList(self, aNode):
        if aNode is None:
            return []
        return [aNode.data] + self.makeList(aNode.lChild) + self.makeList(aNode.rChild)


    def isSimilar(self, n, m):
        nList = self.makeList(n.root)
        mList = self.makeList(m.root) 
        print mList == nList 

Respuestas a la pregunta(3)

Su respuesta a la pregunta