jak mogę reprezentować binarne drzewo poszukiwań w Pythonie?
reprezentują binarne drzewo poszukiwań w Pythonie
class Node(object):
def __init__(self, payload):
self.payload = payload
self.left = self.right = 0
# this concludes the "how to represent" asked in the question. Once you
# represent a BST tree like this, you can of course add a variety of
# methods to modify it, "walk" over it, and so forth, such as:
def insert(self, othernode):
"Insert Node `othernode` under Node `self`."
if self.payload <= othernode.payload:
if self.left: self.left.insert(othernode)
else: self.left = othernode
else:
if self.right: self.right.insert(othernode)
else: self.right = othernode
def inorderwalk(self):
"Yield this Node and all under it in increasing-payload order."
if self.left:
for x in self.left.inorderwalk(): yield x
yield self
if self.right:
for x in self.right.inorderwalk(): yield x
def sillywalk(self):
"Tiny, silly subset of `inorderwalk` functionality as requested."
if self.left:
self.left.sillywalk()
print(self.payload)
if self.right:
self.right.sillywalk()
etc, etc - w zasadzie jak w każdym innym języku, który wykorzystuje referencje zamiast wskaźników (takich jak Java, C #, etc).
Edit :
Oczywiście, samo istnienie sillywalkjest rzeczywiście głupie, bo dokładnie taka sama funkcjonalność jest małpa-liner zewnętrzny fragment na górze walkmetody:
for x in tree.walk(): print(x.payload)
i walkmożna uzyskać tylko o innych funkcjonalności w strumieniu węzły-w-celu, natomiast z sillywalk, można uzyskać tylko o Diddly-squat. Ale, hej, PO mówi yieldsię „zastraszenia” (ciekawe ilu z Python 2.6 Inne 30 słów kluczowych zasługują takie słowa zastraszania w wyroku OP -?), Więc mam nadzieję, printnie jest!
To wszystko jest całkowicie poza rzeczywiste pytania, na reprezentujących BSTS: to pytanie jest całkowicie odpowiedzieć w __init__- a payloadatrybut do przechowywania ładunku w węźle, lefta rightatrybut trzymać albo None(czyli ten węzeł nie ma potomków na tej stronie) lub Node( góra sub-tree zstępnych na odpowiedniej stronie). Oczywiście ograniczenie BST jest to, że każdy lewy potomek każdego węzła (jeśli w ogóle) ma ładowność mniejsza lub równa niż węzeł w pytaniu każdy prawy (ponownie, jeśli w ogóle) ma większą ładowność - dodałam inserttylko pokazać, jak banalne jest to, aby utrzymać tę presję, walk(i teraz sillywalk), aby pokazać, jak banalne jest to, aby wszystkie węzły w kolejności rosnącej od obciążeń. Ponownie, ogólna idea jest właśnie identyczny sposób chcesz reprezentować BST w dowolnym języku, który używa referencji zamiast wskaźników, takich jak, na przykład, C # i Java.













