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

पायथन में सॉर्टेड लिंक्ड लिस्ट को बाइनरी सर्च ट्री में बदलने का प्रोग्राम


मान लीजिए हमारे पास आकार n की एक सॉर्टेड लिंक्ड लिस्ट है, हमें एक बाइनरी सर्च ट्री बनाना है जिसमें k = floor(n/2) वें सबसे छोटे तत्व को रूट बनाया जाए। फिर बाएं सबट्री को kवें नोड के बाएं लिंक्ड लिस्ट से रिकर्सिवली बनाएं, और दाएं सबट्री को kवें नोड के दाएं लिंक्ड लिस्ट से रिकर्सिवली बनाएं।

उदाहरण के लिए, यदि इनपुट [2,4,5,7,10,15] है, तो आउटपुट निम्न ट्री होगा:

पायथन में सॉर्टेड लिंक्ड लिस्ट को बाइनरी सर्च ट्री में बदलने का प्रोग्राम

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

  • solve() मेथड परिभाषित करें जो node लेता है।

  • यदि node null है, तो null लौटाएं।

  • यदि node.next null है, तो node.val के साथ एक नया ट्री नोड लौटाएं।

  • slow := node, fast := node, prev := None।

  • जब तक fast और fast.next null नहीं हैं:

    • prev := slow

    • slow := slow.next

    • fast := fast.next.next

  • prev.next := None (लिस्ट को दो भागों में विभाजित करें)।

  • root := TreeNode(slow.val) बनाएं।

  • root.left := solve(node) (बाएं भाग)।

  • root.right := solve(slow.next) (दाएं भाग)।

  • root लौटाएं।

उदाहरण

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 नोड्स डिलीट करने का प्रोग्राम

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

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

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

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

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