Estoy tratando de hacer una lista de todos los elementos de un árbol de búsqueda binaria. Entiendo que la recursividad, pero no sé cómo hacer que vuelva cada valor y luego lo incluyan en una lista. Quiero crear una función llamada makeList()que devolverá una lista de todos los artículos en mi árbol. Todas las funciones en mis programas de trabajo, excepto la makeList()función y se incluyen para asegurarse de que todo el mundo entiende la estructura básica de cómo puedo configurar mi árbol.
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:
pass
if aNode != None:
self.inOrder(aNode.lChild)
print aNode.data
self.inOrder(aNode.rChild)
def makeList(self, aNode):
a = []
self.inOrder(aNode)
a += [aNode.data]
print a
n = Tree()
for i in [4,7,2,9,1]:
n.insert(i)
n.makeList(n.root)
En cuanto a mi makeList()función de lo que puedo ver por qué no funciona, pero no sé cómo hacer que funcione.
EDITAR
Ok, lo tengo! E incluso me dieron dos respuestas que son:
def makeList(self, aNode, a = []):
if aNode != None:
self.makeList(aNode.lChild, a)
a += [aNode.data]
self.makeList(aNode.rChild, a)
return a
y
def makeList2(self, aNode):
if aNode is None:
return []
return self.makeList2(aNode.lChild) + [aNode.data] + self.makeList2(aNode.rChild)
Y mirando hacia atrás puedo ver que yo no entiendo muy bien la recursividad por lo que es hora de golpear los libros! Cualquier persona tiene buenos recursos en la recursividad?
Otra cuestión, por lo que decir que yo llamo mi makeList()función. Cuando pasa a través de Python makeList(), cuando se llega a la self.makeList(aNode.lChild, a)Cómo comienza ejecutar la función de nuevo mientras aún está terminando la makeList()función o no parar todo y que sólo comienza de nuevo con su nueva aNode?
Espero que tenga sentido.













