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

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

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

तो, अगर इनपुट पसंद है

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

वृक्ष

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

लिंक्ड लिस्ट

तो आउटपुट ट्रू होगा।

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

  • गिरफ्तारी:=एक नई सूची
  • आकार :=गिरफ्तारी का आकार
  • temp_arr :=आकार की एक सरणी (आकार + 1) -1 के साथ आरंभ की गई
  • एक फंक्शन हेल्पर () को परिभाषित करें। यह जड़ लेगा, वैल
    • यदि वैल>=आकार, तो
      • सही लौटें
    • यदि रूट किसी के समान नहीं है, तो
      • झूठी वापसी
    • वैल:=वैल + 1
    • जबकि वैल> 0 और रूट का मान arr[val - 1] के समान नहीं है, do
      • वैल:=temp_arr[val - 1] + 1
    • अगर हेल्पर (रूट का बायां, वैल) या हेल्पर (रूट का दायां, वैल) सही है, तो
      • सही लौटें
    • झूठी वापसी
  • शुरू करें:=सिर
  • जबकि प्रारंभ शून्य के समान नहीं है, करें
    • गिरफ्तारी के अंत में प्रारंभ का मान जोड़ें
    • शुरू करें:=शुरुआत के बाद
  • 1 से आकार + 1 तक के नोड के लिए, करें
    • temp_arr[नोड] :=temp_arr[नोड -1] + 1
    • जबकि temp_arr[node]> 0 और arr[node-1] arr[temp_arr[node] - 1] के समान नहीं है, do
      • temp_arr[node] :=temp_arr[temp_arr[node] - 1] + 1
  • वापसी सहायक(रूट, 0)

उदाहरण

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

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

class ListNode:
   def __init__(self, val, next=None):
      self.val = val
      self.next = next

def insert(temp,data):
   que = []
   que.append(temp)
   while (len(que)):
      temp = que[0]
      que.pop(0)
      if (not temp.left):
         if data is not None:
            temp.left = TreeNode(data)
         else:
            temp.left = TreeNode(0)
         break
      else:
         que.append(temp.left)

      if (not temp.right):
         if data is not None:
            temp.right = TreeNode(data)
         else:
            temp.right = TreeNode(0)
         break
      else:
         que.append(temp.right)

def make_tree(elements):
   node = TreeNode(elements[0])
   for element in elements[1:]:
      insert(node, element)
   return node

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 solve(root, head):
   arr = []
   start = head
   while start:
      arr += (start.val,)
      start = start.next
   size = len(arr)
   temp_arr = [-1] * (size + 1)
   for node in range(1, size + 1):
      temp_arr[node] = temp_arr[node - 1] + 1
      while temp_arr[node] > 0 and arr[node - 1] != arr[temp_arr[node] - 1]:
         temp_arr[node] = temp_arr[temp_arr[node] - 1] + 1
   def helper(root, val):
      if val >= size:
         return True
      if not root:
         return False
      val += 1
      while val > 0 and root.val != arr[val - 1]:
         val = temp_arr[val - 1] + 1
      if helper(root.left, val) or helper(root.right, val):
         return True
      return False
   return helper(root, 0)

root = make_tree([6, 7, 8, 9, 10])
head = make_list([6, 7, 10])
print(solve(root, head))

इनपुट

root = make_tree([6, 7, 8, 9, 10])
head = make_list([6, 7, 10])
print(solve(root, head))

आउटपुट

True

  1. पायथन में दिए गए पेड़ से सबसे बड़ा बाइनरी सर्च सबट्री खोजने का कार्यक्रम

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

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

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

  1. पायथन में एक बाइनरी ट्री पर k-लंबाई पथ खोजने का कार्यक्रम

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