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

पायथन प्रोग्राम: बाइनरी ट्री बनाना और इंसर्शन, डिलीशन, डिस्प्ले ऑपरेशन करना


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

उदाहरण

class Tree_struct:
    def __init__(self, data=None, parent=None):
        self.key = data
        self.children = []
        self.parent = parent

    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 remove_node(self):
        parent = self.parent
        index = parent.children.index(self)
        parent.children.remove(self)
        for child in reversed(self.children):
            parent.children.insert(index, child)
            child.parent = parent

    def bfs(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 <data> at root')
print('add <data> below <data>')
print('remove <data>')
print('display')
print('quit')

while True:
    do = input('आप क्या करना चाहेंगे? ').split()
    operation = do[0].strip().lower()
    if operation == 'add':
        data = int(do[1])
        new_node = Tree_struct(data)
        suboperation = do[2].strip().lower()
        if suboperation == 'at':
            my_instance = new_node
        elif suboperation == 'below':
            position = do[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
            new_node.parent = ref_node
            ref_node.add_node(new_node)
    elif operation == 'remove':
        data = int(do[1])
        to_remove = my_instance.search_node(data)
        if my_instance == to_remove:
            if my_instance.children == []:
                my_instance = None
            else:
                leaf = my_instance.children[0]
                while leaf.children != []:
                    leaf = leaf.children[0]
                leaf.parent.children.remove_node(leaf)
                leaf.parent = None
                leaf.children = my_instance.children
                my_instance = leaf
        else:
            to_remove.remove_node()
    elif operation == 'display':
        if my_instance is not None:
            print('ब्रेडथ फर्स्ट सर्च ट्रैवर्सल है: ', end='')
            my_instance.bfs()
            print()
        else:
            print('ट्री खाली है')
    elif operation == 'quit':
        break

आउटपुट

मेनू (यह मानता है कोई डुप्लिकेट कुंजी नहीं)
add <data> at root
add <data> below <data>
remove <data>
display
quit
आप क्या करना चाहेंगे? add 5 at root
आप क्या करना चाहेंगे? add 6 below 5
आप क्या करना चाहेंगे? add 8 below 6
आप क्या करना चाहेंगे? remove 8
आप क्या करना चाहेंगे? display
ब्रेडथ फर्स्ट सर्च ट्रैवर्सल है: 5 6
आप क्या करना चाहेंगे? quit

व्याख्या

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

  • इसमें एक खाली सूची बनाने के लिए 'init' फ़ंक्शन है।

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

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

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

  • 'remove_node' नामक एक मेथड ट्री से तत्वों को हटाने के लिए परिभाषित किया गया है।

  • 'bfs' नामक एक अन्य मेथड ट्री पर ब्रेडथ फर्स्ट सर्च करने में मदद करता है।

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

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

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

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

नोट: यह एक सामान्य ट्री है, बाइनरी ट्री नहीं

कोड में Tree_struct क्लास एक सामान्य ट्री (General Tree) लागू करती है जहां प्रत्येक नोड के कई बच्चे हो सकते हैं (self.children सूची)। एक वास्तविक बाइनरी ट्री में प्रत्येक नोड के अधिकतम 2 बच्चे होते हैं (बाएं और दाएं)।

बाइनरी ट्री कार्यान्वयन के लिए

class BinaryTreeNode:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None

  1. Python Program: दिए गए Expression का Expression Tree Construct करें Python Program: दिए गए Expression का Expression Tree Construct करें

    Expression trees वे होते हैं जिनमें leaf nodes में operate किए जाने वाले values होते हैं, और internal nodes में operator होता है जिस पर leaf node perform किया जाएगा। उदाहरण: 4 + ((7 + 9) * 2) का expression tree ऐसा होगा - Problem हल करने का दृष्टिकोण दिए गए expression के लिए Expression Tree constru

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

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

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

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