reprezentują binarne drzewo poszukiwań w Pythonie

głosy
5

jak mogę reprezentować binarne drzewo poszukiwań w Pythonie?

Utwórz 17/06/2010 o 04:19
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
11

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.

Odpowiedział 17/06/2010 o 04:26
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more