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

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

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

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

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

k =3, तो आउटपुट 4 होगा, क्योंकि पथ [12,8,3], [12,8,10], [8,12,15], [3,8,10] हैं।

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

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

    • यदि नोड शून्य है, तो

      • 1 और k-1 संख्या 0s के साथ एक सूची लौटाएं

    • बाएँ:=dfs (नोड के बाएँ)

    • दाएँ:=dfs (नोड के दाएँ)

    • मेरे लिए 0 से K की सीमा में, करें

      • उत्तर:=उत्तर + बाएँ [i] * दाएँ [K - 1 - i]

    • res :=0s के आकार K की सूची

    • रेस [0]:=1, रेस [1]:=1

    • मैं के लिए 1 से के -1 की सीमा में, करो

      • रेस [i + 1]:=रेस [i + 1] + बाएं [i]

      • रेस [i + 1]:=रेस [i + 1] + दाएं [i]

    • रिटर्न रेस

  • मुख्य विधि से, निम्न कार्य करें-

  • उत्तर :=0


  • dfs(रूट)


  • वापसी उत्तर


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

उदाहरण

class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.data = data
      self.left = left
      self.right = right
class Solution:
   def solve(self, root, K):
      def dfs(node):
         if not node:
            return [1] + [0] * (K-1)
         left = dfs(node.left)
         right = dfs(node.right)
         for i in range(K):
            self.ans += left[i] * right[K - 1 - i]
         res = [0] * K
         res[0] = res[1] = 1
         for i in range(1, K - 1):
            res[i + 1] += left[i]
            res[i + 1] += right[i]
         return res
      self.ans = 0
      dfs(root)
      return self.ans
ob = Solution()
root = TreeNode(12)
root.left = TreeNode(8)
root.right = TreeNode(15)
root.left.left = TreeNode(3)
root.left.right = TreeNode(10)
print(ob.solve(root, 3))

इनपुट

root = TreeNode(12)
root.left = TreeNode(8)
root.right = TreeNode(15)
root.left.left = TreeNode(3)
root.left.right = TreeNode(10)
3

आउटपुट

4

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

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

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

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

  1. पायथन में एक बाइनरी ट्री का सबसे कम सामान्य पूर्वज

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। हमें दो दिए गए नोड्स के सबसे कम सामान्य पूर्वज नोड्स को खोजना होगा। दो नोड्स p और q का LCA वास्तव में पेड़ में सबसे कम नोड के रूप में होता है जिसमें p और q दोनों डीसेंटेंट होते हैं। तो अगर बाइनरी ट्री [3,5,1,6,2,0,8,null,null,7,4] जैसा है। पेड़ जैसा होगा -