किसी चुने हुए नोड को नया पैरेंट बनाकर ट्री को फिर से व्यवस्थित कीजिए।
ट्री एक खास तरह का ग्राफ है, जिसमें सारे नोड आपस में जुड़े होते हैं, लेकिन कोई चक्र नहीं होता। इसका मतलब है कि नोड के किसी भी जोड़े के लिए, एक नोड से दूसरे नोड तक पहुँचने का ठीक एक ही पथ होता है।
इस अभ्यास में ट्री को नए सिरे से व्यवस्थित करके चीज़ों को एक अलग दृष्टिकोण से देखना है। उदाहरण के लिए, वंशवृक्ष आम तौर पर पूर्वज के दृष्टिकोण से दिखाए जाते हैं:
+------0------+
| | |
+-1-+ +-2-+ +-3-+
| | | | | |
4 5 6 7 8 9
लेकिन ट्री में कोई अपने आप से तय दिशा नहीं होती। उसी जानकारी को ट्री के किसी भी दूसरे नोड के दृष्टिकोण से दिखाया जा सकता है। इसके लिए उस नोड को ऊपर खींचकर रूट बना दिया जाता है और उसके सारे संबंध भी उसके साथ खींच लिए जाते हैं। तो 6 के दृष्टिकोण से वही ट्री ऐसा दिखेगा:
6
|
+-----2-----+
| |
7 +-----0-----+
| |
+-1-+ +-3-+
| | | |
4 5 8 9
इससे हम दो नोड के बीच के पथ को और आसानी से बता सकते हैं। उदाहरण के लिए, 6-9 का पथ (जो पहले ट्री में ऊपर रूट तक जाता है और फिर नीचे किसी दूसरे लीफ नोड तक उतरता है) 6-2-0-3-9 के पथ पर चलता हुआ दिखता है।
इस अभ्यास में एक इनपुट ट्री लेना है और उसे किसी एक नोड के दृष्टिकोण से नए सिरे से व्यवस्थित करना है।
कभी-कभी एक्सेप्शन उठाना ज़रूरी हो जाता है। ऐसा करते समय आपको हमेशा एक अर्थपूर्ण एरर संदेश शामिल करना चाहिए, जिससे पता चले कि एरर का स्रोत क्या है। इससे आपका कोड पढ़ने में आसान हो जाता है और डीबगिंग में काफी मदद मिलती है। जहाँ आपको पता हो कि एरर का स्रोत एक निश्चित टाइप का ही होगा, वहाँ आप बिल्ट-इन एरर टाइप में से कोई एक उठाना चुन सकते हैं, पर तब भी अर्थपूर्ण संदेश शामिल करना चाहिए।
इस अभ्यास में आपको raise स्टेटमेंट का उपयोग करके कई ValueErrors उठाने हैं। ऐसा तब कीजिए जब Tree() क्लास को ऐसा ट्री दिया जाए जिसकी दिशा नहीं बदली जा सकती, या start node और end node के बीच कोई रास्ता न मिले। टेस्ट तभी पास होंगे जब आप अपेक्षित exception टाइप raise करें और उसके साथ अपेक्षित संदेश भी शामिल करें।
कृपया टेस्ट और उनके अपेक्षित परिणामों को ध्यान से देखिए।
Exercism पर साइन अप कीजिए और Python को 17 कॉन्सेप्ट146 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।