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

पायथन में सम योग के साथ सबसे लंबे पथ की लंबाई खोजने का कार्यक्रम

मान लीजिए कि हमारे पास एक बाइनरी ट्री है। हमें सबसे लंबे पथ की लंबाई ज्ञात करनी है जिसका योग एक सम संख्या है।

इसलिए, यदि इनपुट छवि की तरह है, तो आउटपुट 5 होगा, क्योंकि पथ [5, 2, 4, 8, 5], योग =24 (सम) जैसा है।

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

  • एक फ़ंक्शन को परिभाषित करें dfs() । यह नोड लेगा
  • यदि नोड शून्य है, तो
    • एक जोड़ी लौटाएं (0, -inf)
  • (बाएं_0, बाएं_1):=dfs (नोड के बाएं)
  • (दाएं_0, दाएं_1):=dfs(नोड के दाएं)
  • यदि नोड का मान विषम है, तो
    • उत्तर:=अधिकतम उत्तर, (बाएं_1 + दाएं_0 + 1) और (बाएं_0 + दाएं_1 + 1)
    • एक जोड़ी लौटाएं (अधिकतम (बाएं_1 + 1), (दाएं_1 + 1) और 0) , अधिकतम (बाएं_0 + 1) और (दाएं_0 + 1))
  • अन्यथा,
    • उत्तर:=अधिकतम उत्तर, (बाएं_0 + दाएं_0 + 1) और (बाएं_1 + दाएं_1 + 1)
    • एक जोड़ी लौटाएं (अधिकतम (बाएं_0 + 1), (दाएं_0 + 1), 0) , अधिकतम (बाएं_1 + 1), (दाएं_1 + 1))
  • मुख्य विधि से निम्न कार्य करें -
  • उत्तर:=0
  • dfs(रूट)
  • वापसी उत्तर

उदाहरण (पायथन)

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

class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.val = data
      self.left = left
      self.right = right
class Solution:
   def solve(self, root):
      def dfs(node):
         if not node:
            return 0, float("-inf")
         left_0, left_1 = dfs(node.left)
         right_0, right_1 = dfs(node.right)
         if node.val & 1:
            self.ans = max(self.ans, left_1 + right_0 + 1, left_0 + right_1 + 1)
            return max(left_1 + 1, right_1 + 1, 0), max(left_0 + 1, right_0 + 1)
         else:
            self.ans = max(self.ans, left_0 + right_0 + 1, left_1 + right_1 + 1)
            return max(left_0 + 1, right_0 + 1, 0), max(left_1 + 1, right_1 + 1)
   self.ans = 0
   dfs(root)
   return self.ans
ob = Solution()
root = TreeNode(2)
root.left = TreeNode(5)
root.right = TreeNode(4)
root.right.left = TreeNode(8)
root.right.right = TreeNode(2)
root.right.left.left = TreeNode(5)
print(ob.solve(root))

इनपुट

root = TreeNode(2)
root.left = TreeNode(5)
root.right = TreeNode(4)
root.right.left = TreeNode(8)
root.right.right = TreeNode(2)
root.right.left.left = TreeNode(5)

आउटपुट

5

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

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है, हमें रूट से लीफ नोड तक के सबसे लंबे पथ का योग ज्ञात करना है। यदि दो समान लंबे पथ हैं, तो पथ को अधिक राशि के साथ लौटाएं। तो, अगर इनपुट पसंद है तो आउटपुट 20 होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - फ़ंक्शन rec() को परिभाषित करें। यह कठिन

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

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है, हमें ट्री में किन्हीं दो नोड्स के बीच सम मानों वाला सबसे लंबा पथ खोजना होगा। तो, अगर इनपुट पसंद है तो आउटपुट 5 होगा क्योंकि सबसे लंबा रास्ता [10, 2, 4, 8, 6] है। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - उत्तर :=0 फ़ंक्शन ढूंढें() को परिभाष

  1. पायथन प्रोग्राम में किसी संख्या के सम गुणनखंडों का योग ज्ञात करें

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक संख्या दी गई है, हमें संख्या के सभी सम गुणनखंडों का योग प्रदर्शित करना होगा। दृष्टिकोण हम जाँचते हैं कि क्या संख्या विषम है, फिर कोई सम गुणनखंड नहीं हैं, इसलिए 0 लौटाएँ। यदि संख्या सम है, तो हम गणना के माध्