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

पायथन प्रोग्राम: दिए गए बाइनरी ट्री को डबल लिंक्ड लिस्ट में बदलें


जब दिए गए बाइनरी ट्री को डबल लिंक्ड लिस्ट में बदलने की आवश्यकता होती है, तो एक 'Node' क्लास बनाने की आवश्यकता होती है। इस क्लास में दो एट्रिब्यूट्स होते हैं, नोड में मौजूद डेटा, और लिंक्ड लिस्ट के अगले नोड तक पहुंच।

एक और 'linked_list' क्लास बनाने की आवश्यकता होती है जिसमें एक इनिशियलाइज़ेशन फ़ंक्शन होगा, और नोड का हेड 'None' से इनिशियलाइज़ किया जाएगा।

डबल लिंक्ड लिस्ट में, नोड्स में पॉइंटर्स होते हैं। वर्तमान नोड में अगले नोड के साथ-साथ पिछले नोड का पॉइंटर होगा। सूची में अंतिम मान का अगले पॉइंटर में 'NULL' मान होगा। इसे दोनों दिशाओं में ट्रैवर्स किया जा सकता है।

बाइनरी ट्री एक नॉन-लीनियर डेटा स्ट्रक्चर है, जिसमें एक रूट नोड होता है और रूट को छोड़कर हर नोड का एक पैरेंट नोड हो सकता है। एक बाइनरी ट्री नोड में अधिकतम दो बच्चे हो सकते हैं।

यूज़र द्वारा परिभाषित कई मेथड्स दिए गए बाइनरी ट्री को डबल लिंक्ड लिस्ट में बदलने और नोड मान प्रिंट करने के लिए होते हैं।

उदाहरण

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

class BinaryTreeToList:
    def __init__(self):
        self.root = None
        self.head = None
        self.tail = None
    def convert_tree_to_list(self, node_val):
        if node_val is None:
            return
        self.convert_tree_to_list(node_val.left)
        if (self.head == None):
            self.head = self.tail = node_val
        else:
            self.tail.right = node_val
            node_val.left = self.tail
            self.tail = node_val
        self.convert_tree_to_list(node_val.right)
    def print_it(self):
        curr = self.head
        if (self.head == None):
            print("सूची खाली है")
            return
        print("नोड्स हैं:")
        while curr != None:
            print(curr.data)
            curr = curr.right

my_instance = BinaryTreeToList()
print("एलिमेंट्स सूची में जोड़े जा रहे हैं")
my_instance.root = Node(10)
my_instance.root.left = Node(14)
my_instance.root.right = Node(17)
my_instance.root.left.left = Node(22)
my_instance.root.left.right = Node(29)
my_instance.root.right.left = Node(45)
my_instance.root.right.right = Node(80)
my_instance.convert_tree_to_list(my_instance.root)
my_instance.print_it()

आउटपुट

एलिमेंट्स सूची में जोड़े जा रहे हैं
नोड्स हैं:
22
14
29
10
45
17
80

व्याख्या

  • 'Node' क्लास बनाई जाती है।
  • आवश्यक एट्रिब्यूट्स के साथ एक और क्लास बनाई जाती है।
  • 'convert_tree_to_list' नामक एक और मेथड परिभाषित किया गया है, जिसका उपयोग दिए गए बाइनरी ट्री को डबल लिंक्ड लिस्ट में बदलने के लिए किया जाता है।
  • 'print_it' नामक एक और मेथड परिभाषित किया गया है, जो सर्कुलर लिंक्ड लिस्ट के नोड्स प्रदर्शित करता है।
  • 'binary_tree_to_list' क्लास का एक ऑब्जेक्ट बनाया जाता है, और ट्री को डबल लिंक्ड लिस्ट में बदलने के लिए उस पर मेथड्स कॉल किए जाते हैं।
  • एक 'init' मेथड परिभाषित किया जाता है, जो डबल लिंक्ड लिस्ट के रूट, हेड, और टेल नोड्स को None पर सेट करता है।
  • 'convert_tree_to_list' मेथड को कॉल किया जाता है।
  • यह बाइनरी ट्री के माध्यम से पुनरावृति करता है, और इसे डबल लिंक्ड लिस्ट में बदलता है।
  • इसे 'print_it' मेथड का उपयोग करके कंसोल पर प्रदर्शित किया जाता है।

  1. पायथन में दिए गए बाइनरी ट्री में BST मौजूद है या नहीं जांचने का प्रोग्राम पायथन में दिए गए बाइनरी ट्री में BST मौजूद है या नहीं जांचने का प्रोग्राम

    मान लीजिए हमें एक बाइनरी ट्री दी गई है। हमें ट्री से सबसे बड़ा सबट्री ढूंढना है जो बाइनरी सर्च ट्री (BST) है। हम BST का रूट नोड लौटाते हैं। इसलिए, यदि इनपुट है: तो आउटपुट होगा: समाधान दृष्टिकोण पोस्ट-ऑर्डर ट्रैवर्सल का उपयोग करके प्रत्येक सबट्री की जांच करें ट्रैक करें कि सबट्री BST है या नहीं

  1. पायथन में दिए गए बाइनरी ट्री में लिंक्ड लिस्ट मौजूद है या नहीं जांचने का प्रोग्राम पायथन में दिए गए बाइनरी ट्री में लिंक्ड लिस्ट मौजूद है या नहीं जांचने का प्रोग्राम

    मान लीजिए हमें एक बाइनरी ट्री दी गई है जिसका रूट नोड root है और एक लिंक्ड लिस्ट जिसका हेड नोड head है। हमें यह ढूंढना है कि वह लिंक्ड लिस्ट उस बाइनरी ट्री में मौजूद है या नहीं। यदि ट्री में नोड्स का एक सेट एक-दूसरे से लिंक्ड लिस्ट के क्रम में जुड़ा हुआ है, और वह क्रम प्रदान की गई लिंक्ड लिस्ट के समा

  1. पायथन में लिंक्ड लिस्ट को जिग-जैग बाइनरी ट्री में बदलने का प्रोग्राम पायथन में लिंक्ड लिस्ट को जिग-जैग बाइनरी ट्री में बदलने का प्रोग्राम

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