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

पायथन का उपयोग करके एक गलत बाइनरी ट्री को ठीक करने का कार्यक्रम

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

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

पायथन का उपयोग करके एक गलत बाइनरी ट्री को ठीक करने का कार्यक्रम

हम देख सकते हैं कि 4 और 6 के बीच एक गलत लिंक है। 4 अंक से 6 तक का दायाँ चाइल्ड पॉइंटर।

तो आउटपुट, सही पेड़ का इनऑर्डर प्रतिनिधित्व होगा - 2, 3, 5, 6, 7, 8,

नोड 4 को हटा दिया गया है क्योंकि इसमें नोड 6 का गलत लिंक है।

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

  • q :=जड़ वाला एक नया डेक

  • p :=एक नया नक्शा

  • विज़िट किया गया :=एक नया सेट

  • जबकि q खाली नहीं है, करें

    • cur :=q का सबसे बायां तत्व पॉप करें

    • अगर विज़िट में cur मौजूद है, तो

      • is_left :=p[p[cur, 0]]

      • Grand_p :=p[p[cur, 0]]

      • अगर is_left शून्य नहीं है, तो

        • Grand_p के बाएँ :=null

      • अन्यथा,

        • Grand_p का अधिकार:=शून्य

      • वापसी जड़

    • देखे गए का जोड़ें(cur)

    • यदि वक्र का बायां भाग शून्य नहीं है, तो

      • p[बाएं वक्र] :=एक नया टपल (cur, 1)

      • क्यू के अंत में वक्र के बाईं ओर डालें

    • यदि वक्र का अधिकार शून्य नहीं है, तो

      • p[दायां वक्र] :=एक नया टपल (cur, 0)

      • q के अंत में cur का दायां डालें

  • वापसी जड़

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

उदाहरण

import collections
class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.data = data
      self.left = left
      self.right = right
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):
   Tree = TreeNode(elements[0])
   for element in elements[1:]:
      insert(Tree, element)
   return Tree
def search_node(root, element):
   if (root == None):
      return None
   if (root.data == element):
      return root
      res1 = search_node(root.left, element)
   if res1:
      return res1
   res2 = search_node(root.right, element)
   return res2
def print_tree(root):
   if root is not None:
      print_tree(root.left)
      print(root.data, end = ', ')
      print_tree(root.right)
def solve(root):
   q = collections.deque([root])
   p, visited = dict(), set()
   while q:
      cur = q.popleft()
      if cur in visited:
         grand_p, is_left = p[p[cur][0]]
         if is_left: grand_p.left = None
            else: grand_p.right = None
            return root
      visited.add(cur)
      if cur.left:
         p[cur.left] = (cur, 1)
         q.append(cur.left)
      if cur.right:
         p[cur.right] = (cur, 0)
         q.append(cur.right)
   return root
root = make_tree([5, 3, 7, 2, 4, 6, 8])
link_from = search_node(root, 4)
link_to = search_node(root, 6)
link_from.right = link_to
print_tree(solve(root))

इनपुट

root = make_tree([5, 3, 7, 2, 4, 6, 8])
link_from = search_node(root, 4)
link_to = search_node(root, 6)
link_from.right = link_to

आउटपुट

2, 3, 5, 6, 7, 8,

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

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है, हमें रूट नोड से लीफ नोड तक जाने वाले किसी भी पथ का सबसे बड़ा योग ज्ञात करना है। तो, अगर इनपुट पसंद है तो रूट से आउटपुट 29 होगा, अगर हम 5-<9-<7-<8 पथ का अनुसरण करते हैं तो यह जोड़ के बाद 29 हो जाएगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे- फंक

  1. पायथन में एक बाइनरी ट्री की अधिकतम चौड़ाई खोजने का कार्यक्रम

    मान लीजिए हमारे पास एक बाइनरी ट्री है, हमें ट्री में किसी भी स्तर की अधिकतम चौड़ाई ज्ञात करनी है। यहां एक स्तर की चौड़ाई उन नोड्स की संख्या है जो सबसे बाएं नोड और सबसे दाएं नोड के बीच हो सकते हैं। तो, अगर इनपुट . जैसा है तो आउटपुट 2 . होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे- न्य

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

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। हमारा काम एक उल्टा बाइनरी ट्री बनाना है। तो अगर पेड़ नीचे जैसा है - उल्टा पेड़ इस तरह होगा इसे हल करने के लिए, हम एक पुनरावर्ती दृष्टिकोण का उपयोग करेंगे यदि रूट शून्य है, तो वापस आएं बाएं और दाएं पॉइंटर्स को स्वैप करें बाएं सबट्री और राइट सबट्री को द