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

पायथन का उपयोग करके अच्छे लीफ नोड्स जोड़े की संख्या खोजने का कार्यक्रम

मान लीजिए कि हमारे पास एक बाइनरी ट्री है। और दूसरा मान दूरी d. दो अलग-अलग लीफ नोड्स की एक जोड़ी को अच्छा कहा जाता है, जब इन दो नोड्स के बीच का सबसे छोटा रास्ता छोटा या दूरी d के समान होता है।

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

पायथन का उपयोग करके अच्छे लीफ नोड्स जोड़े की संख्या खोजने का कार्यक्रम

और दूरी d =4, तो आउटपुट 2 होगा क्योंकि जोड़े (8,7) और (5,6) हैं क्योंकि उनकी पथ लंबाई दूरी 2 है, लेकिन (7,5) या (8,6) या अन्य जोड़े हैं अच्छे नहीं हैं क्योंकि उनके पथ की लंबाई 5 है जो d =4 से बड़ी है

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

  • सोल:=0

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

  • अगर रूट शून्य है, तो

    • एक नई सूची लौटाएं

  • अगर जड़ पत्ती है, तो

    • एक जोड़ी के साथ एक सरणी लौटाएं [0, 0]

  • अन्यथा,

    • cur :=एक नई सूची

    • एल:=उपयोग (रूट के बाएं)

    • आर:=उपयोग (रूट का अधिकार)

    • l में प्रत्येक n के लिए, करें

      • n[1] :=n[1] + 1

    • r में प्रत्येक n के लिए, करें

      • n[1] :=n[1] + 1

    • r में प्रत्येक n के लिए, करें

      • l में प्रत्येक n1 के लिए, करें

        • यदि n[1] + n1[1] <=d, तो

          • सोल:=सोल + 1

    • वापसी एल+आर

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

  • उपयोग (रूट)

  • वापसी सोल

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

उदाहरण

class TreeNode:
def __init__(self, val=0, left=None, right=None):
   self.val = val
   self.left = left
   self.right = right
class Solution:
   def __init__(self):
      self.sol = 0
   def solve(self, root, d):
      def util(root):
         if not root:
            return []
         if not root.left and not root.right:
            return [[0, 0]]
         else:
            cur = []
            l = util(root.left)
            r = util(root.right)
            for n in l:
               n[1] += 1
            for n in r:
               n[1] += 1
            for n in r:
               for n1 in l:
                  if n[1] + n1[1] <= d:
                     self.sol += 1
            return l+r
      util(root)
      return self.sol
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.right = TreeNode(4)
root.left.right.left = TreeNode(8)
root.left.right.right = TreeNode(7)
root.right.left = TreeNode(5)
root.right.right = TreeNode(6)
d = 4
ob = Solution()
print(ob.solve(root, d))

इनपुट

root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.right = TreeNode(4)
root.left.right.left = TreeNode(8)
root.left.right.right = TreeNode(7)
root.right.left = TreeNode(5)
root.right.right = TreeNode(6)
d = 4

आउटपुट

2

  1. पायथन का उपयोग करके समान लेबल वाले उप-वृक्ष में नोड्स की संख्या खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास n नोड्स वाला एक रूटेड सामान्य ट्री है, जिसके नोड्स 0 से n-1 तक गिने जाते हैं। प्रत्येक नोड में लोअरकेस अंग्रेजी अक्षर वाला एक लेबल होता है। लेबल्स को लेबल एरे में इनपुट के रूप में दिया जाता है, जहां लेबल्स [i] में ith नोड के लिए लेबल होता है। पेड़ को किनारे की सूची द्वारा दर्श

  1. पायथन में एक पेड़ के गैर-आसन्न नोड्स की अधिकतम राशि खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है, हमें उन मानों का अधिकतम योग ज्ञात करना होगा जो प्राप्त किए जा सकते हैं, कोई भी दो मान बच्चे के आसन्न माता-पिता नहीं हो सकते हैं। तो, अगर इनपुट पसंद है तो आउटपुट 17 होगा क्योंकि 10, 4, 3 एक दूसरे से सटे नहीं हैं। इसे हल करने के लिए, हम इन चरणों का पालन क

  1. पायथन में एक श्रेणी में नोड्स की संख्या खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक बीएसटी है, और हमारे पास बाएं और दाएं सीमाएं एल और आर भी हैं, हमें रूट में उन सभी नोड्स की गिनती ढूंढनी है जिनके मान एल और आर (समावेशी) के बीच मौजूद हैं। तो, अगर इनपुट पसंद है l =7, r =13, तो आउटपुट 3 होगा, क्योंकि तीन नोड हैं:8, 10, 12. इसे हल करने के लिए, हम इन चरणों