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

पायथन का उपयोग करके बाइनरी ट्री की जड़ को बदलने का कार्यक्रम

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

  • यदि नोड में एक बायाँ बच्चा है, तो वह दायाँ बच्चा बन जाता है।

  • एक नोड का माता-पिता उसका बायां बच्चा बन जाता है। इस प्रक्रिया में, पैरेंट नोड का उस नोड से लिंक शून्य हो जाता है, इसलिए इसमें केवल एक बच्चा होगा।

पेड़ की नोड संरचना नीचे की तरह है -

TreeNode:
   data: <integer>
   left: <pointer of TreeNode>
   right: <pointer of TreeNode>
   parent: <pointer of TreeNode>

हमें बदले हुए पेड़ की जड़ वापस करनी होगी।

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

पायथन का उपयोग करके बाइनरी ट्री की जड़ को बदलने का कार्यक्रम

और नया मूल 8 है; तब रूपांतरित वृक्ष का क्रमागत निरूपण होगा - 2, 3, 4, 5, 7, 6, 8,

पेड़ का नया रूट नोड 8 है।

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

  • एक फ़ंक्शन हेल्पर() को परिभाषित करें। यह नोड लेगा, new_par

    • यदि नोड रूट के समान है, तो

      • नोड के जनक :=new_par

      • यदि नोड का बायां हिस्सा new_par के समान है, तो

        • नोड के बाईं ओर:=शून्य

      • यदि नोड का अधिकार new_par के समान है, तो

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

      • वापसी जड़

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

      • नोड के दाएँ:=नोड के बाएँ

    • यदि नोड के पैरेंट का बायां नोड नोड के समान है, तो

      • नोड के जनक के बाएँ :=शून्य

    • नोड के बाईं ओर:=सहायक (नोड के माता-पिता, नोड)

    • नोड के जनक :=new_par

    • वापसी नोड

  • वापसी सहायक (पत्ती, अशक्त)

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

उदाहरण

import collections
class TreeNode:
   def __init__(self, data, left = None, right = None, parent = None):
      self.data = data
      self.left = left
      self.right = right
      self.parent = parent
   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, parent = temp)
            else:
               temp.left = TreeNode(0, parent = temp)
         break
      else:
         que.append(temp.left)
      if (not temp.right):
         if data is not None:
            temp.right = TreeNode(data, parent = temp)
         else:
            temp.right = TreeNode(0, parent = temp)
         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, leaf):
   def helper(node, new_par):
      if node == root:
         node.parent = new_par
         if node.left == new_par:
            node.left = None
         if node.right == new_par:
            node.right = None
         return root
      if node.left:
         node.right = node.left
      if node.parent.left == node:
         node.parent.left = None
      node.left = helper(node.parent, node)
      node.parent = new_par
      return node
   return helper(leaf, None)
root = make_tree([5, 3, 7, 2, 4, 6, 8])
root = solve(root, search_node(root, 8))
print_tree(root)

इनपुट

root = make_tree([5, 3, 7, 2, 4, 6, 8])
root = solve(root, search_node(root, 8))

आउटपुट

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

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

    मान लीजिए हमारे पास बाइनरी ट्री है; हमें यह जांचना होगा कि यह बाइनरी सर्च ट्री है या नहीं। जैसा कि हम जानते हैं कि बीएसटी में निम्नलिखित गुण होते हैं - इसके बाएँ उपप्रकार के सभी नोड वर्तमान नोड मान से छोटे हैं इसके दाहिने सबट्री के सभी नोड वर्तमान नोड मान से बड़े हैं ये गुण सभी नोड्स के लिए पुनरावर

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

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

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

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