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 insert_at_left(self, new_node):
        self.left = new_node
    def insert_at_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(key)
            if temp is not None:
                return temp
        if self.right is not None:
            temp = self.right.search(key)
            return temp
        return None
    def depth_first_search(self):
        print('entering {}...'.format(self.key))
        if self.left is not None:
            self.left.depth_first_search()
        print('at {}...'.format(self.key))
        if self.right is not None:
            self.right.depth_first_search()
        print('leaving {}...'.format(self.key))

btree_instance = None
print('मेन्यू (कोई डुप्लिकेट कीज़ नहीं)')
print('insert  at root')
print('insert  left of ')
print('insert  right of ')
print('dfs')
print('quit')
while True:
    my_input = input('आप क्या करना चाहेंगे? ').split()
    op = my_input[0].strip().lower()
    if op == 'insert':
        data = int(my_input[1])
        new_node = BinaryTree_struct(data)
        sub_op = my_input[2].strip().lower()
        if sub_op == 'at':
            btree_instance = new_node
        else:
            position = my_input[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('ऐसी कोई की नहीं।')
                continue
            if sub_op == 'left':
                ref_node.insert_at_left(new_node)
            elif sub_op == 'right':
                ref_node.insert_at_right(new_node)
    elif op == 'dfs':
        print('डेप्थ-फर्स्ट सर्च ट्रैवर्सल:')
        if btree_instance is not None:
            btree_instance.depth_first_search()
        print()
    elif op == 'quit':
        break

आउटपुट

मेन्यू (कोई डुप्लिकेट कीज़ नहीं)
insert  at root
insert  left of 
insert  right of 
dfs
quit
आप क्या करना चाहेंगे? insert 5 at root
आप क्या करना चाहेंगे? insert 6 left of 5
आप क्या करना चाहेंगे? insert 8 right of 5
आप क्या करना चाहेंगे? dfs
डेप्थ-फर्स्ट सर्च ट्रैवर्सल:
entering 5...
entering 6...
at 6...
leaving 6...
at 5...
entering 8...
at 8...
leaving 8...
leaving 5...
आप क्या करना चाहेंगे? quit
बाहर निकलने के लिए quit() या Ctrl-D (यानी EOF) का उपयोग करें

व्याख्या

  • आवश्यक एट्रिब्यूट्स के साथ 'BinaryTree_struct' क्लास बनाई जाती है।

  • इसमें एक 'init' फंक्शन होता है जिसका उपयोग 'left' और 'right' नोड्स को 'None' असाइन करने के लिए किया जाता है।

  • 'set_root' नामक एक अन्य मेथड ट्री के रूट को निर्दिष्ट करने के लिए परिभाषित की जाती है।

  • 'insert_at_left' नामक एक अन्य मेथड परिभाषित की जाती है जो ट्री के बाईं ओर नोड्स जोड़ने में मदद करती है।

  • 'insert_at_right' नामक एक अन्य मेथड परिभाषित की जाती है जो ट्री के दाईं ओर नोड्स जोड़ने में मदद करती है।

  • 'search_elem' नामक एक अन्य मेथड परिभाषित की जाती है जो किसी विशिष्ट एलिमेंट को खोजने में मदद करती है।

  • 'depth_first_search' नामक एक मेथड परिभाषित की जाती है जो बाइनरी ट्री पर डेप्थ फर्स्ट सर्च करने में मदद करती है।

  • क्लास का एक इंस्टेंस बनाया जाता है और 'None' असाइन किया जाता है।

  • एक मेन्यू दिया जाता है।

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

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

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


  1. Python में दिशाओं की सूची का उपयोग करके बाइनरी ट्री को पार करने का प्रोग्राम Python में दिशाओं की सूची का उपयोग करके बाइनरी ट्री को पार करने का प्रोग्राम

    मान लीजिए हमारे पास एक बाइनरी ट्री और moves नामक स्ट्रिंग्स की एक सूची है जिसमें R (दाएं), L (बाएं) और U (ऊपर) शामिल हैं। रूट से शुरू करके, हमें moves में प्रत्येक चाल को निष्पादित करके ट्री को पार करना होगा जहां: R दाएं चाइल्ड को पार करने का संकेत देता है। L बाएं चाइल्ड को पार करने का संकेत देता ह

  1. पायथन में बाइनरी ट्री कलरिंग गेम पायथन में बाइनरी ट्री कलरिंग गेम

    मान लीजिए दो खिलाड़ी बाइनरी ट्री पर टर्न-बेस्ड गेम खेलते हैं। हमारे पास इस बाइनरी ट्री का रूट और ट्री में नोड्स की संख्या n है। यहां n विषम है, और प्रत्येक नोड का 1 से n तक एक विशिष्ट मान है। पहले, पहला खिलाड़ी 1 <= x <= n के साथ एक मान x नाम देता है, और दूसरा खिलाड़ी 1 <= y <= n के साथ एक मान y नाम

  1. पायथन में बाइनरी ट्री का व्यास पायथन में बाइनरी ट्री का व्यास

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें ट्री के व्यास की लंबाई की गणना करनी है। बाइनरी ट्री का व्यास वास्तव में ट्री में किन्हीं दो नोड्स के बीच सबसे लंबे पथ की लंबाई है। यह पथ अनिवार्य रूप से रूट से होकर नहीं जाता। यदि ट्री नीचे जैसा है, तो व्यास 3 होगा क्योंकि पथ [4,2,1,3] या [5,2,1,3] की लंब