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

पायथन में बाइनरी ट्री अधिकतम पथ योग

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

पायथन में बाइनरी ट्री अधिकतम पथ योग

यहां आउटपुट 32 होगा।

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

  • हल () नामक एक विधि को परिभाषित करें, यह नोड लेगा

  • यदि नोड शून्य है या नोड का मान 0 है, तो वापस 0

  • बायां:=अधिकतम 0 और हल करें (नोड के बाएं)

  • दाएं:=अधिकतम 0 और हल करें (नोड के दाएं)

  • उत्तर:=अधिकतम उत्तर और बाएँ + दाएँ + नोड का डेटा

  • रिटर्न नोड डेटा + बाएँ और दाएँ का अधिकतम

  • मुख्य विधि से, उत्तर सेट करें:=-inf, फिर हल (रूट) को कॉल करें और उत्तर वापस करें

उदाहरण

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

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
class Solution(object):
   def maxPathSum(self, root):
      self.ans = -float('inf')
      self.solve(root)
      return self.ans
   def solve(self,node):
      if not node or node.data == 0:
         return 0
      left = max(0,self.solve(node.left))
      right = max(0,self.solve(node.right))
      self.ans = max(self.ans,left+right+node.data)
      return node.data + max(left,right)
ob = Solution()
root = make_tree([-10,9,10,None,None,15,7])
print(ob.maxPathSum(root))

इनपुट

[-10,9,10,None,None,15,7]

आउटपुट

32

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

    मान लीजिए कि एक अनंत बाइनरी ट्री में जहां प्रत्येक नोड में दो बच्चे होते हैं, नोड्स को पंक्ति क्रम में लेबल किया जाता है। अब विषम संख्या वाली पंक्तियों (पहली, तीसरी, पाँचवीं,...) में, लेबलिंग बाएँ से दाएँ होती है, और सम संख्या वाली पंक्तियों (दूसरी, चौथी, छठी,...) में, लेबलिंग दाएँ से बाएँ होती है .

  1. पायथन में पथ योग

    मान लीजिए कि हमारे पास एक पेड़ और एक योग है। हमें एक रास्ता ऐसा खोजना होगा कि अगर हम उस रास्ते पर चलेंगे तो हमें वह योग मिलेगा जो दिए गए योग से मेल खाएगा। मान लीजिए पेड़ [0,-3,9,-10, null,5] जैसा है और योग 14 है, तो एक पथ है 0 → 9 → 5 इसे हल करने के लिए, हम इन चरणों का पालन करेंगे। यदि जड़ शून

  1. पायथन में बाइनरी ट्री की अधिकतम गहराई

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। हमें उस वृक्ष की अधिकतम गहराई ज्ञात करनी है। एक पेड़ की अधिकतम गहराई नोड्स की अधिकतम संख्या है जो सबसे लंबे पथ का उपयोग करके जड़ से पत्ती तक पहुंचने के लिए ट्रैवर्स की जाती है। मान लीजिए पेड़ नीचे जैसा है। गहराई यहां 3 होगी। इसे हल करने के लिए, हम इन चरणो