Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

एक पेड़ के इनऑर्डर ट्रैवर्सल में एनएच नोड खोजने के लिए पायथन प्रोग्राम

जब एक बाइनरी ट्री के इनऑर्डर ट्रैवर्सल का उपयोग करके 'एन' नोड को खोजने की आवश्यकता होती है, तो रूट तत्व को सेट करने के तरीकों के साथ एक बाइनरी ट्री क्लास बनाया जाता है, तत्वों को बाएं या दाएं में जोड़ें, ऑर्डर ट्रैवर्सल और इसी तरह से प्रदर्शन करें। वर्ग का एक उदाहरण बनाया जाता है, और इसका उपयोग विधियों तक पहुँचने के लिए किया जा सकता है।

नीचे उसी का एक प्रदर्शन है -

उदाहरण

class BinaryTree_struct:
   def __init__(self, key=None):
      self.key = key
      self.left = None
      self.right = None

   def set_root(self, key):
      self.key = key

   def inorder_nth(self, n):
      return self.inorder_nth_helper_fun(n, [])

   def inorder_nth_helper_fun(self, n, in_ord):
      if self.left is not None:
         temp = self.left.inorder_nth_helper_fun(n, in_ord)
         if temp is not None:
            return temp
      in_ord.append(self)
      if n == len(in_ord):
         return self
      if self.right is not None:
         temp = self.right.inorder_nth_helper_fun(n, in_ord)
         if temp is not None:
            return temp

   def insert_t0_left(self, new_node):
      self.left = new_node

   def insert_to_right(self, new_node):
      self.right = new_node

   def search_elem(self, key):
      if self.key == key:
         return self
      if self.left is not None:
         temp = self.left.search_elem(key)
         if temp is not None:
            return temp
      if self.right is not None:
         temp = self.right.search_elem(key)
         return temp
      return None

btree_instance = None

print('Menu (this assumes no duplicate keys)')
print('insert <data> at root')
print('insert <data> left of <data>')
print('insert <data> right of <data>')
print('inorder ')
print('quit')

while True:
   do = input('What would you like to do? ').split()

   operation = do[0].strip().lower()
   if operation == 'insert':
      data = int(do[1])
      new_node = BinaryTree_struct(data)
      suboperation = do[2].strip().lower()
      if suboperation == 'at':
         btree_instance = new_node
      else:
         position = do[4].strip().lower()
         key = int(position)
         ref_node = None
         if btree_instance is not None:
            ref_node = btree_instance.search_elem(key)
         if ref_node is None:
            print('No such key.')
            continue
         if suboperation == 'left':
            ref_node.insert_t0_left(new_node)
         elif suboperation == 'right':
            ref_node.insert_to_right(new_node)

   elif operation == 'inorder':
      if btree_instance is not None:
         index = int(do[1].strip().lower())
         node = btree_instance.inorder_nth(index)
         if node is not None:
            print('nth term of inorder traversal: {}'.format(node.key))
         else:
            print('The index exceeds maximum possible index.')
      else:
         print('The tree is empty...')

   elif operation == 'quit':
      break

आउटपुट

Menu (this assumes no duplicate keys)
insert <data> at root
insert <data> left of <data>
insert <data> right of <data>
inorder
quit
What would you like to do? insert 5 at root
What would you like to do? insert 6 left of 5
What would you like to do? insert 8 right of 5
What would you like to do? inorder 5
The index exceeds maximum possible index.
What would you like to do? 6
6

स्पष्टीकरण

  • आवश्यक विशेषताओं के साथ 'BinaryTree_struct' वर्ग बनाया गया है।

  • इसमें एक 'init' फंक्शन होता है जिसका इस्तेमाल बाएँ और दाएँ नोड्स को 'कोई नहीं' पर सेट करने के लिए किया जाता है।

  • इसमें एक 'set_root' विधि है जो बाइनरी ट्री की जड़ को सेट करने में मदद करती है।

  • 'inorder_nth' नाम की एक अन्य विधि जो रिकर्सन का उपयोग करके इनऑर्डर ट्रैवर्सल करती है।

  • इसलिए इसके साथ परिभाषित एक सहायक कार्य है।

  • 'insert_to_right' नाम की एक अन्य विधि को परिभाषित किया गया है जो रूट नोड के दाईं ओर तत्व जोड़ने में मदद करती है।

  • 'insert_to_left' नाम की एक विधि परिभाषित की गई है, जो रूट नोड के बाईं ओर तत्व जोड़ने में मदद करती है।

  • 'Search_elem' नाम की एक विधि परिभाषित की गई है, जो एक विशिष्ट तत्व की खोज में मदद करती है।

  • 'BinaryTree_struct' वर्ग का एक ऑब्जेक्ट बनाया जाता है।

  • उपयोगकर्ता इनपुट उस ऑपरेशन के लिए लिया जाता है जिसे निष्पादित करने की आवश्यकता होती है।

  • उपयोगकर्ता की पसंद के आधार पर, ऑपरेशन किया जाता है।

  • प्रासंगिक आउटपुट कंसोल पर प्रदर्शित होता है।


  1. पायथन में एक पेड़ के सबसे गहरे नोड को खोजने का कार्यक्रम

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें सबसे गहरे नोड का मान ज्ञात करना होगा। यदि एक से अधिक गहरे नोड हैं, तो सबसे बाएं सबसे गहरे नोड को वापस करें। तो, अगर इनपुट पसंद है तो आउटपुट 4 होगा क्योंकि 4 और 7 सबसे गहरे हैं लेकिन 4 सबसे ज्यादा बचे हैं। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे

  1. पायथन में पास्कल के त्रिभुज की nवीं पंक्ति खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक संख्या n है, हमें पास्कल त्रिभुज की nवीं (0-अनुक्रमित) पंक्ति ज्ञात करनी है। जैसा कि हम जानते हैं कि पास्कल का त्रिभुज इस प्रकार बनाया जा सकता है - शीर्ष पंक्ति में, 1 की एक सरणी है। उपरोक्त संख्या को ऊपर और बाईं ओर ऊपर और दाईं ओर जोड़कर अगली पंक्ति बनाई जाती है। तो कुछ

  1. पायथन में एक बाइनरी ट्री की अधिकतम चौड़ाई खोजने का कार्यक्रम

    मान लीजिए हमारे पास एक बाइनरी ट्री है, हमें ट्री में किसी भी स्तर की अधिकतम चौड़ाई ज्ञात करनी है। यहां एक स्तर की चौड़ाई उन नोड्स की संख्या है जो सबसे बाएं नोड और सबसे दाएं नोड के बीच हो सकते हैं। तो, अगर इनपुट . जैसा है तो आउटपुट 2 . होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे- न्य