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

BFS ट्रैवर्सल का उपयोग करके ट्री के नोड्स प्रदर्शित करने का पायथन प्रोग्राम


जब ब्रेडथ फर्स्ट सर्च ट्रैवर्सल का उपयोग करके ट्री के नोड्स प्रदर्शित करने हों, तो एक क्लास बनाई जाती है जिसमें रूट नोड सेट करने, ट्री में एलिमेंट्स जोड़ने, विशिष्ट एलिमेंट खोजने, 'bfs' (ब्रेडथ फर्स्ट सर्च) करने आदि के लिए मेथड्स होते हैं। क्लास का एक इंस्टेंस बनाकर इन मेथड्स को एक्सेस और उपयोग किया जा सकता है।

उदाहरण

class Tree_struct:
    def __init__(self, data=None):
        self.key = data
        self.children = []
    def set_root(self, data):
        self.key = data
    def add_node(self, node):
        self.children.append(node)
    def search_node(self, key):
        if self.key == key:
            return self
        for child in self.children:
            temp = child.search_node(key)
            if temp is not None:
                return temp
        return None
    def bfs_operation(self):
        queue = [self]
        while queue != []:
            popped = queue.pop(0)
            for child in popped.children:
                queue.append(child)
            print(popped.key, end=' ')

my_instance = None
print('मेन्यू (मान लें कोई डुप्लिकेट कीज़ नहीं)')
print('add  at root')
print('add  below ')
print('bfs')
print('quit')
while True:
    my_input = input('आप कौन सा ऑपरेशन करेंगे? ').split()
    operation = my_input[0].strip().lower()
    if operation == 'add':
        data = int(my_input[1])
        new_node = Tree_struct(data)
        suboperation = my_input[2].strip().lower()
        if suboperation == 'at':
            my_instance = new_node
        elif suboperation == 'below':
            position = my_input[3].strip().lower()
            key = int(position)
            ref_node = None
            if my_instance is not None:
                ref_node = my_instance.search_node(key)
            if ref_node is None:
                print('ऐसी कोई की नहीं')
                continue
            ref_node.add_node(new_node)
    elif operation == 'bfs':
        if my_instance is None:
            print('ट्री खाली है')
        else:
            print('ब्रेडथ फर्स्ट सर्च ट्रैवर्सल है:', end='')
            my_instance.bfs_operation()
            print()
    elif operation == 'quit':
        break

आउटपुट

मेन्यू (मान लें कोई डुप्लिकेट कीज़ नहीं)
add  at root
add  below 
bfs
quit
आप कौन सा ऑपरेशन करेंगे? add 6 at root
आप कौन सा ऑपरेशन करेंगे? add 4 below 6
आप कौन सा ऑपरेशन करेंगे? add 9 below 4
आप कौन सा ऑपरेशन करेंगे? bfs
ब्रेडथ फर्स्ट सर्च ट्रैवर्सल है: 6 4 9
आप कौन सा ऑपरेशन करेंगे? quit

व्याख्या

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

  • इसमें एक 'init' फंक्शन होता है जो एक खाली सूची बनाने के लिए उपयोग किया जाता है।

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

  • इसमें एक 'add_node' मेथड होती है जो ट्री में एलिमेंट्स जोड़ने में मदद करती है।

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

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

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

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

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

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


  1. Python से बाइनरी ट्री की रूट को लीफ नोड पर कैसे बदलें? Python से बाइनरी ट्री की रूट को लीफ नोड पर कैसे बदलें?

    लीफ नोड को नया रूट बनाने के लिए पैरेंट पॉइंटर्स का उपयोग करके ट्री को रीस्ट्रक्चर करें: लेफ्ट चाइल्ड राइट बन जाता है, पैरेंट लेफ्ट बन जाता है। एल्गोरिदम रिकर्सिव हेल्पर helper(node, new_par)। अगर नोड मूल रूट है: पैरेंट सेट करें, लेफ्ट/राइट चाइल्ड जो new_par हैं उन्हें None करें। अगर लेफ्ट चाइल्ड है

  1. Python से बाइनरी ट्री में दिए गए नोड के दाएं वाले नोड को कैसे ढूंढें? Python से बाइनरी ट्री में दिए गए नोड के दाएं वाले नोड को कैसे ढूंढें?

    लेवल ऑर्डर ट्रैवर्सल (BFS) से दिए गए नोड के उसी लेवल पर दाएं पड़ोसी नोड को ढूंढें। एल्गोरिदम क्यू से BFS, लेवल दर लेवल प्रोसेस करें। प्रत्येक लेवल के नोड्स को temp लिस्ट में स्टोर करें। अगर टारगेट नोड u मिले तो उसका इंडेक्स नोट करें। अगर इंडेक्स अंतिम है तो None रिटर्न (दाएं कोई नहीं)। अन्यथा temp[

  1. Python से सबट्री में समान लेबल वाले नोड्स की संख्या कैसे ढूंढें? Python से सबट्री में समान लेबल वाले नोड्स की संख्या कैसे ढूंढें?

    रूटेड ट्री में प्रत्येक नोड के लिए, उसके सबट्री में उसी लेबल वाले नोड्स की संख्या ढूंढें (लेबल्स लोअरकेस लेटर्स)। एल्गोरिदम एज लिस्ट से ग्राफ बनाएं (अनडायरेक्टेड)। लेबल मैप बनाएं। रिकर्सिव DFS r(ni): चिल्ड्रन के काउंटर्स मर्ज करें, अपना लेबल जोड़ें, R[ni] = count[label]। पैरेंट लिंक हटाकर साइकिल अव