उपग्रह

उपग्रह

मध्यम

निर्देश

कल्पना कीजिए कि आपको एक बाइनरी ट्री अल्फा सेंटॉरी की ओर बढ़ते एक सैटेलाइट तक भेजना है, और आपके पास बैंडविड्थ सीमित है। चूँकि इस ट्री में कोई चीज़ दोहराई नहीं जाती, इसलिए इसे उसके प्री-ऑर्डर और इन-ऑर्डर ट्रैवर्सल से अद्वितीय रूप से दर्शाया जा सकता है।

सैटेलाइट के लिए ऐसा सॉफ्टवेयर लिखिए जो इन ट्रैवर्सल से ट्री फिर से बना सके।

प्री-ऑर्डर ट्रैवर्सल में सबसे पहले मौजूदा नोड की वैल्यू पढ़ी जाती है, इसीलिए इसके नाम में "pre" है। इसके बाद बाएँ सबट्री को प्री-ऑर्डर में पढ़ा जाता है, और फिर दाएँ सबट्री को भी प्री-ऑर्डर में पढ़ा जाता है।

इन-ऑर्डर ट्रैवर्सल पहले बाएँ सबट्री को इन-ऑर्डर में पढ़ता है, फिर मौजूदा नोड को, और अंत में दाएँ सबट्री को इन-ऑर्डर में पढ़ता है। यानी बाएँ से दाएँ के क्रम में।

उदाहरण के लिए, इस ट्री का प्री-ऑर्डर ट्रैवर्सल [a, i, x, f, r] है। इस ट्री का इन-ऑर्डर ट्रैवर्सल [i, a, f, x, r] है।

  a
 / \
i   x
   / \
  f   r

ध्यान दीजिए: प्री-ऑर्डर ट्रैवर्सल में सबसे पहला एलिमेंट हमेशा रूट होता है।

एक्सेप्शन संदेश

कभी-कभी एक्सेप्शन उठाना ज़रूरी हो जाता है। ऐसा करते समय आपको हमेशा एक अर्थपूर्ण एरर संदेश शामिल करना चाहिए, जिससे पता चले कि एरर का स्रोत क्या है। इससे आपका कोड पढ़ने में आसान हो जाता है और डीबगिंग में काफी मदद मिलती है। जिन स्थितियों में आप जानते हैं कि एरर का स्रोत एक खास टाइप का होगा, वहाँ आप अंतर्निहित एरर टाइप में से कोई एक चुन सकते हैं, लेकिन संदेश फिर भी अर्थपूर्ण होना चाहिए।

इस अभ्यास में, अगर preorder और inorder आर्गुमेंट लंबाई के हिसाब से या एलिमेंट के हिसाब से आपस में मेल न खाते हों, या एलिमेंट अलग-अलग न हों, तो आपको raise स्टेटमेंट से ValueError "फेंकना" होता है। टेस्ट तभी पास होंगे जब आप exception को raise करें और उसके साथ एक संदेश भी दें।

संदेश के साथ ValueError उठाने के लिए, संदेश को exception टाइप के आर्गुमेंट के रूप में लिखिए:

# if preorder and inorder are not the same length
raise ValueError("traversals must have the same length")

# if preorder and inorder do not share the same elements
raise ValueError("traversals must have the same elements")
    
# if element repeat (are not unique)    
raise ValueError("traversals must contain unique items")
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Python Exercism

उपग्रह शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Python को 17 कॉन्सेप्ट146 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।