अजगर में बाइनरी खोज पेड़ का प्रतिनिधित्व

वोट
5

कैसे मैं अजगर में बाइनरी खोज पेड़ का प्रतिनिधित्व करते हैं?

17/06/2010 को 04:19
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
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()

आदि, आदि - मूल रूप से किसी भी अन्य भाषा (जैसे जावा, सी #, आदि) के संकेत के बजाय संदर्भ का उपयोग करता है में अच्छा लगता है।

संपादित करें :

बेशक, के अस्तित्व sillywalk, वास्तव में मूर्खतापूर्ण है, क्योंकि वास्तव में ही कार्यक्षमता के शीर्ष पर एक झुलसाना लाइनर बाहरी टुकड़ा है walkविधि:

for x in tree.walk(): print(x.payload)

और साथ walkतुम सिर्फ नोड्स में आदेश धारा पर किसी अन्य कार्यक्षमता के बारे में प्राप्त कर सकते हैं, जबकि, के साथ sillywalk, आप बस के बारे में diddly-फूहड़ प्राप्त कर सकते हैं। लेकिन, हे, ओ पी का कहना yieldहै "डराना" (मुझे आश्चर्य है कि कैसे अजगर 2.6 के अन्य 30 कीवर्ड के कई ओपी के फैसले में इस तरह के डराने शब्द लायक? -) तो मैं आशा करती हूं कि printनहीं है!

इस पर, सभी पूरी तरह से वास्तविक सवाल से परे है का प्रतिनिधित्व करने BSTs: कि सवाल पूरी तरह से उत्तर दिया है __init__- एक payloadविशेषता नोड के पेलोड पकड़, करने के लिए leftऔर rightया तो पकड़ से जोड़कर देखते हैं Noneया (जिसका अर्थ है, इस नोड उस ओर कोई सन्तान है) एक Node( उचित तरफ वंश के उप पेड़ के शीर्ष)। बेशक, BST बाधा है कि प्रत्येक नोड (यदि हो तो) के हर बाईं वंशज एक पेलोड कम या प्रश्न में नोड, हर अधिकार एक की तुलना में बराबर (फिर से, यदि कोई हो) है एक अधिक से अधिक पेलोड है - मैं जोड़ा insertबस दिखाने के लिए कैसे तुच्छ यह है कि बाधा को बनाए रखना है, walk(और अब sillywalk) को दिखाने के लिए कैसे तुच्छ यह पेलोड के बढते क्रम में सभी नोड्स प्राप्त करने के लिए है। फिर, सामान्य विचार अभी जिस तरह तुम चाहते हैं के समान है प्रतिनिधित्व करते हैं जो संदर्भ बल्कि संकेत से, जैसे, उदाहरण के लिए, सी # और जावा के लिए उपयोग करता है किसी भी भाषा में एक BST।

17/06/2010 को 04:26
का स्रोत उपयोगकर्ता

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