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

पायथन में बाइनरी सर्च ट्री से लिंक की गई सूची बनाने का कार्यक्रम

मान लीजिए कि हमारे पास आकार n की एक क्रमबद्ध लिंक्ड सूची नोड है, हमें k =फ़्लोर (n / 2) के मान को रूट के रूप में सेट करके एक बाइनरी सर्च ट्री बनाना होगा। फिर kth नोड के बाईं ओर लिंक की गई सूची का उपयोग करके बाएं उपट्री का पुन:निर्माण करना। और kth नोड के दाईं ओर लिंक की गई सूची का उपयोग करके सही सबट्री का पुन:निर्माण करना।

इसलिए, अगर इनपुट [2,4,5,7,10,15] जैसा है, तो आउटपुट होगा

पायथन में बाइनरी सर्च ट्री से लिंक की गई सूची बनाने का कार्यक्रम

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे-

  • हल करने के तरीके को परिभाषित करें (), यह नोड लेगा

  • यदि नोड शून्य है, तो

    • वापसी शून्य

  • अगर अगला नोड शून्य है, तो

    • नोड के मान के साथ एक नया ट्री नोड लौटाएं

  • धीमा:=नोड, तेज़:=नोड

  • पिछला :=कोई नहीं

  • जबकि उपवास और अगले उपवास शून्य नहीं हैं, करें

    • पिछला :=धीमा

    • धीमा :=धीमे के आगे

    • उपवास :=उपवास के अगले के बाद

  • पिछला का अगला :=कोई नहीं

  • जड़:=एक नया ट्री नोड जिसका मान धीमा है

  • रूट के बाईं ओर:=हल करें (नोड)

  • जड़ का दाहिना भाग :=हल करें (धीमे के आगे)

  • वापसी जड़

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

class ListNode:
   def __init__(self, data, next = None):
      self.val = data
      self.next = next
class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.data = data
      self.left = left
      self.right = right

def make_list(elements):
   head = ListNode(elements[0])
   for element in elements[1:]:
      ptr = head
      while ptr.next:
         ptr = ptr.next
      ptr.next = ListNode(element)
return head

def print_tree(root):
   if root is not None:
      print_tree(root.left)
      print(root.data, end = ', ')
      print_tree(root.right)

class Solution:
   def solve(self, node):
      if not node:
         return None
      if not node.next:
         return TreeNode(node.val)
      slow = fast = node
      prev = None
      while fast and fast.next:
         prev = slow
         slow = slow.next
         fast = fast.next.next
      prev.next = None
      root = TreeNode(slow.val)
      root.left = self.solve(node)
      root.right = self.solve(slow.next)

      return root

ob = Solution()
head = make_list([2,4,5,7,10,15])
root = ob.solve(head)
print_tree(root)

इनपुट

[2,4,5,7,10,15]

आउटपुट

2, 4, 5, 7, 10, 15,

  1. पायथन में लिंक की गई सूची से m नोड्स के बाद n नोड्स को हटाने का कार्यक्रम

    मान लीजिए कि हमें एक लिंक्ड सूची दी गई है जिसमें हेड के रूप में प्रारंभ नोड है, और दो पूर्णांक संख्याएं एम और एन हैं। हमें सूची को पार करना होगा और कुछ नोड्स को हटाना होगा जैसे कि पहले m नोड्स को सूची में रखा जाता है और अगले n नोड्स को पहले m नोड्स को हटा दिए जाने के बाद। हम इसे तब तक करते हैं जब तक

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

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

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

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