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

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

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

एक और 'लिंक्ड_लिस्ट' क्लास बनाने की जरूरत है जिसमें एक इनिशियलाइज़ेशन फंक्शन होगा, और नोड के हेड को 'कोई नहीं' के लिए इनिशियलाइज़ किया जाएगा।

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

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

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

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

उदाहरण

class Node:
   def __init__(self, my_data):
      self.right = None
      self.data = my_data
      self.left = None
class binary_tree_to_list:
   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("The list is empty")
         return
      print("The nodes are :")
      while curr != None:
         print(curr.data)
         curr = curr.right
my_instance = binary_tree_to_list()
print("Elements are being added to the list")
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()

आउटपुट

Elements are being added to the list
The nodes are :
22
14
29
10
45
17
80

स्पष्टीकरण

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

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

    मान लीजिए हमें एक बाइनरी ट्री दिया गया है। हमें ट्री से सबसे बड़े सबट्री का पता लगाना है जो कि बाइनरी सर्च ट्री (BST) है। हम BST का रूट नोड लौटाते हैं। तो, अगर इनपुट पसंद है तो आउटपुट होगा - इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - सी :=0 एम:=शून्य एक फ़ंक्शन रिकर्स () को परिभाषित कर

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

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

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

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