किसी चुने हुए नोड को नया पैरेंट बनाकर ट्री को फिर से व्यवस्थित कीजिए।
ट्री एक खास तरह का ग्राफ है, जिसमें सारे नोड आपस में जुड़े होते हैं, लेकिन कोई चक्र नहीं होता। इसका मतलब है कि नोड के किसी भी जोड़े के लिए, एक नोड से दूसरे नोड तक पहुँचने का ठीक एक ही पथ होता है।
इस अभ्यास में ट्री को नए सिरे से व्यवस्थित करके चीज़ों को एक अलग दृष्टिकोण से देखना है। उदाहरण के लिए, वंशवृक्ष आम तौर पर पूर्वज के दृष्टिकोण से दिखाए जाते हैं:
+------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 के पथ पर चलता हुआ दिखता है।
इस अभ्यास में एक इनपुट ट्री लेना है और उसे किसी एक नोड के दृष्टिकोण से नए सिरे से व्यवस्थित करना है।
ट्री ऑब्जेक्ट में दो एट्रिब्यूट होते हैं:
String लेबलList<Tree> चाइल्डटेस्ट प्रोग्राम, Tree.of बिल्डर फंक्शन को बार-बार लागू करके ट्री बनाता है। उदाहरण के लिए, यह स्टेटमेंट
Tree tree = Tree.of("a", List.of(Tree.of("b"), Tree.of("c", List.of(Tree.of("d")))));
निम्नलिखित ट्री बनाता है:
"a"
|
-------
| |
"b" "c"
|
"d"
आप मान सकते हैं कि टेस्ट ट्री में कोई डुप्लिकेट वैल्यू नहीं होगी।
इस अभ्यास का सबसे दिलचस्प हिस्सा FromPov और PathTo मेथड हैं।
FromPov मेथड एक स्ट्रिंग आर्गुमेंट from लेता है, जो ट्री के किसी नोड को उसकी वैल्यू के ज़रिए बताता है। इसे ऐसा ट्री लौटाना चाहिए जिसके रूट में from वैल्यू हो। आप मूल ट्री को बदलकर उसी को लौटा सकते हैं, या नया ट्री बनाकर उसे लौटा सकते हैं। अगर आप नया ट्री लौटाते हैं, तो मूल ट्री को आप जैसे चाहें इस्तेमाल कर सकते हैं या नष्ट कर सकते हैं। बेशक, बेहतर यही होगा कि आप उसे बिना बदले छोड़ दें।
PathTo मेथड दो स्ट्रिंग आर्गुमेंट from और to लेता है, जो ट्री के दो नोडों को उनकी वैल्यू के ज़रिए बताते हैं। इसे ट्री में पहले नोड से दूसरे नोड तक का सबसे छोटा रास्ता लौटाना चाहिए।
कभी-कभी एक्सेप्शन फेंकना ज़रूरी हो जाता है। ऐसा करते समय आपको हमेशा एक अर्थपूर्ण एरर संदेश शामिल करना चाहिए, जो बताए कि इस एरर का स्रोत क्या है। इससे आपका कोड पढ़ने में आसान हो जाता है और डीबग करने में काफी मदद मिलती है।
इस अभ्यास में कुछ खास बातें हैं। अगर Tree() क्लास को ऐसा ट्री दिया जाए जिसका ओरिएंटेशन नहीं बदला जा सकता, या start node और end node के बीच कोई रास्ता न मिल सके, तो आपको throw कीवर्ड का उपयोग करके कई UnsupportedOperationException फेंकने होते हैं। टेस्ट तभी पास होंगे जब आप throw भी करें और exception के साथ संदेश भी शामिल करें।
किसी संदेश के साथ UnsupportedOperationException फेंकने के लिए, उस संदेश को exception टाइप के आर्गुमेंट के रूप में लिखिए:
// when a tree cannot be oriented to a new node POV
throw new UnsupportedOperationException("Tree could not be reoriented");
// when a path cannot be found between a start and end node on the tree.
throw new UnsupportedOperationException("No path found");
Exercism पर साइन अप कीजिए और Java को 26 कॉन्सेप्ट158 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।