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

पायथन में स्तर क्रम बाइनरी ट्री ट्रैवर्सल को लिंक्ड सूची में बदलने का कार्यक्रम

मान लीजिए कि हमारे पास एक बाइनरी सर्च ट्री है, हमें इसे लेवलऑर्डर ट्रैवर्सल का उपयोग करके सिंगल लिंक्ड लिस्ट में बदलना होगा।

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

पायथन में स्तर क्रम बाइनरी ट्री ट्रैवर्सल को लिंक्ड सूची में बदलने का कार्यक्रम

तो आउटपुट [5, 4, 10, 2, 7, 15, ]

. होगा

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

  • सिर:=एक नई लिंक्ड सूची नोड

  • currNode :=सिर

  • q :=मूल्य रूट के साथ एक सूची

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

    • curr :=q से पहला एलिमेंट डिलीट करें

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

      • currNode के आगे:=एक नया लिंक्ड लिस्ट नोड जिसमें curr का मान होता है

      • currNode :=currNode के आगे

      • q के अंत में curr के बाईं ओर डालें

      • q के अंत में दायां वक्र डालें

  • सिर के बगल में लौटें

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

उदाहरण

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.val = data
      self.left = left
      self.right = right

def print_list(head):
   ptr = head
   print('[', end = "")
   while ptr:
      print(ptr.val, end = ", ")
      ptr = ptr.next
print(']')
   
class Solution:
   def solve(self, root):
      head = ListNode(None)
      currNode = head
      q = [root]
      while q:
         curr = q.pop(0)
         if curr:
            currNode.next = ListNode(curr.val)
            currNode = currNode.next
            q.append(curr.left)
            q.append(curr.right)
      return head.next

ob = Solution()
root = TreeNode(5)
root.left = TreeNode(4)
root.right = TreeNode(10)
root.left.left = TreeNode(2)
root.right.left = TreeNode(7)
root.right.right = TreeNode(15)
head = ob.solve(root)
print_list(head)

इनपुट

root = TreeNode(5)
root.left = TreeNode(4)
root.right = TreeNode(10)
root.left.left = TreeNode(2)
root.right.left = TreeNode(7)
root.right.right = TreeNode(15)
head = ob.solve(root)

आउटपुट

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

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

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

  1. पायथन में बाइनरी ट्री ज़िगज़ैग लेवल ऑर्डर ट्रैवर्सल

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें ज़िगज़ैग लेवल ऑर्डर ट्रैवर्सल ढूंढना होगा। तो पहली पंक्ति के लिए, बाएं से दाएं स्कैन करें, फिर दूसरी पंक्ति से दाएं से बाएं, फिर बाएं से दाएं और इसी तरह। तो अगर पेड़ जैसा है - ट्रैवर्सल अनुक्रम [[3],[20,9],[15,7]] होगा इसे हल करने के लिए, हम इन चरणो

  1. पाइथन में सॉर्ट किए गए ऐरे को बाइनरी सर्च ट्री में कनवर्ट करें

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