POV

POV

मध्यम

निर्देश

किसी चुने हुए नोड को नया पैरेंट बनाकर ट्री को फिर से व्यवस्थित कीजिए।

ट्री एक खास तरह का ग्राफ है, जिसमें सारे नोड आपस में जुड़े होते हैं, लेकिन कोई चक्र नहीं होता। इसका मतलब है कि नोड के किसी भी जोड़े के लिए, एक नोड से दूसरे नोड तक पहुँचने का ठीक एक ही पथ होता है।

इस अभ्यास में ट्री को नए सिरे से व्यवस्थित करके चीज़ों को एक अलग दृष्टिकोण से देखना है। उदाहरण के लिए, वंशवृक्ष आम तौर पर पूर्वज के दृष्टिकोण से दिखाए जाते हैं:

    +------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 के पथ पर चलता हुआ दिखता है।

इस अभ्यास में एक इनपुट ट्री लेना है और उसे किसी एक नोड के दृष्टिकोण से नए सिरे से व्यवस्थित करना है।

कार्यान्वयन नोट्स

टेस्ट प्रोग्राम बार-बार वेरिएडिक New फंक्शन लगाकर पेड़ बनाता है। उदाहरण के लिए, यह स्टेटमेंट

tree := New("a",New("b"),New("c",New("d")))

इस तरह का पेड़ बनाता है:

      "a"
       |
    -------
    |     |
   "b"   "c"
          |
         "d"

आप मान सकते हैं कि टेस्ट पेड़ों में कोई डुप्लिकेट वैल्यू नहीं होगी।

टेस्ट प्रोग्राम पेड़ों को खोलने के लिए Value और Children मेथड का उपयोग करेगा।

इस अभ्यास के दिलचस्प हिस्से पर काम शुरू करने से पहले पेड़ बनाने और तोड़ने का बुनियादी काम ठीक से चलना चाहिए, इसलिए इसकी जाँच पहले तीन टेस्ट में अलग से की जाती है।


FromPov और PathTo मेथड ही इस अभ्यास का दिलचस्प हिस्सा हैं।

FromPov मेथड एक स्ट्रिंग आर्गुमेंट from लेता है, जो पेड़ के एक नोड को उसकी वैल्यू के ज़रिए बताता है। इसे ऐसा पेड़ लौटाना चाहिए जिसके मूल में from वैल्यू हो। आप मौजूदा पेड़ को बदलकर वही लौटा सकते हैं, या एक नया पेड़ बनाकर उसे लौटा सकते हैं। अगर आप नया पेड़ लौटाते हैं, तो मौजूदा पेड़ को इस्तेमाल करना या नष्ट कर देना आप पर निर्भर है। निश्चय ही, अच्छा यही होगा कि आप उसे बिना बदले छोड़ दें।

PathTo मेथड दो स्ट्रिंग आर्गुमेंट from और to लेता है, जो पेड़ के दो नोड उनकी वैल्यू के ज़रिए बताते हैं। इसे पेड़ में पहले नोड से दूसरे नोड तक का सबसे छोटा रास्ता लौटाना चाहिए।

GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Go Exercism

POV शुरू करने के लिए तैयार हैं?

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