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

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


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

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

तो हमने इस पेड़ में एक नोड का लेबल दिया है, हमें उस लेबल के साथ पेड़ की जड़ से नोड तक के पथ में लेबल ढूंढना होगा। इसलिए यदि इनपुट लेबल =14 है, तो आउटपुट [1,3,4,14]

. होगा

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

  • दो सरणी ट्री और रेस को परिभाषित करें, ट्री ऐरे में 0 और 1 डालें, विषम सेट करें:=1 और वर्तमान:=1 और दो:=2

  • यदि लेबल =1 है, तो एकल तत्व 1 के साथ एक सूची लौटाएँ।

  • एक अनंत लूप बनाएं -

    • अगर विषम गैर-शून्य है, तो

      • max_val :=वर्तमान + दो

      • अस्थायी :=max_val

      • जबकि अस्थायी> वर्तमान

        • पेड़ में अस्थायी डालें

        • अगर अस्थायी =लेबल, तो लूप से बाहर आएं

        • तापमान में 1

          . की कमी करें
      • यदि पेड़ का अंतिम तत्व लेबल है, तो लूप से बाहर आएं

      • वर्तमान :=max_val

    • अन्यथा

      • अस्थायी:=दो

      • जबकि तापमान शून्य नहीं है

        • अस्थायी:=1, करंट को 1 से बढ़ाएँ, फिर करंट को ट्री में बढ़ाएँ

        • अगर करंट =लेबल है, तो लूप से बाहर आएं

      • यदि पेड़ का अंतिम तत्व लेबल है, तो लूप से बाहर आएं

    • अस्थायी:=अस्थायी * 2

    • विषम :=असत्य यदि विषम शून्य नहीं है, अन्यथा सत्य है

  • सूचकांक :=पेड़ की लंबाई – 1

  • जबकि इंडेक्स 0 नहीं है

    • ट्री [इंडेक्स] को रेस ऐरे में डालें

    • अनुक्रमणिका :=अनुक्रमणिका/2

  • रेस :=रेस की उलटी सूची

  • रिटर्न रेस

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

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

class Solution(object):
   def pathInZigZagTree(self, label):
      tree = []
      res = []
      tree.append(0)
      tree.append(1)
      odd = 1
      current = 1
      two = 2
      if label == 1:
         return [1]
      while True:
         if odd:
            max_val = current + two
            temp = max_val
            while temp>current:
               tree.append(temp)
               if temp == label:
                  break
               temp-=1
            if tree[-1]== label:
               break
            current = max_val
         else:
            temp = two
            while temp:
               temp-=1
               current+=1
               tree.append(current)
            if current == label:
               break
            if tree[-1]== label:
               break
         two*=2
         odd = not odd
      index = len(tree)-1
      while index:
         res.append(tree[index])
         index//=2
      res=res[::-1]
      return res
ob = Solution()
print(ob.pathInZigZagTree(14))

इनपुट

14

आउटपुट

[1,3,4,14]

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

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

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

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। हमारा काम एक उल्टा बाइनरी ट्री बनाना है। तो अगर पेड़ नीचे जैसा है - उल्टा पेड़ इस तरह होगा इसे हल करने के लिए, हम एक पुनरावर्ती दृष्टिकोण का उपयोग करेंगे यदि रूट शून्य है, तो वापस आएं बाएं और दाएं पॉइंटर्स को स्वैप करें बाएं सबट्री और राइट सबट्री को द

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

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