Προσπαθώ να κάνω μια λίστα με όλα τα στοιχεία σε ένα δυαδικό δέντρο αναζήτησης. Κατανοώ την αναδρομή, αλλά δεν ξέρω πώς να το επιστρέψει κάθε αξία και στη συνέχεια να προσθέσετε το σε μια λίστα. Θέλω να δημιουργήσω μια λειτουργία που ονομάζεται makeList()η οποία θα επιστρέψει μια λίστα με όλα τα στοιχεία στο δέντρο μου. Όλες οι λειτουργίες στα προγράμματα μου εργάζονται εκτός από τη makeList()λειτουργία και συμπεριλαμβάνονται για να βεβαιωθείτε ότι ο καθένας καταλαβαίνει τη βασική δομή για το πώς μπορώ να ρυθμίσω το δέντρο μου.
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)
Κοιτάζοντας μου makeList()λειτουργία Μπορώ να καταλάβω γιατί δεν λειτουργεί, αλλά δεν ξέρω πώς να την κάνουμε να λειτουργήσει.
ΕΠΕΞΕΡΓΑΣΙΑ
Εντάξει, το κατάλαβα! Και εγώ ακόμα πήρα δύο απαντήσεις οι οποίες είναι:
def makeList(self, aNode, a = []):
if aNode != None:
self.makeList(aNode.lChild, a)
a += [aNode.data]
self.makeList(aNode.rChild, a)
return a
και
def makeList2(self, aNode):
if aNode is None:
return []
return self.makeList2(aNode.lChild) + [aNode.data] + self.makeList2(aNode.rChild)
Και κοιτάζοντας πίσω μπορώ να δω ότι δεν μπορώ να καταλάβω αναδρομή πολύ καλά και έτσι ήρθε η ώρα να χτυπήσει τα βιβλία! Όποιος έχει κάποια καλή πόρων αναδρομή;
Ένα άλλο θέμα, έτσι λένε καλώ μου makeList()λειτουργία. Όταν Python περνάει makeList(), όταν παίρνει να το self.makeList(aNode.lChild, a)κάνει αυτό αρχίσουν να τρέχουν τη λειτουργία και πάλι, ενώ είναι ακόμα τελειώνοντας τη makeList()λειτουργία ή έχει σταματήσει τα πάντα και αυτό ακριβώς ξεκινά πάνω με το είναι νέα aNode;
Ελπίζω ότι έχει νόημα.













