নির্বাচিত একটি নোডকে নতুন রুট বানিয়ে একটি ট্রি সাজানো।
একটি ট্রি হলো এক বিশেষ ধরনের গ্রাফ, যেখানে সব নোড সংযুক্ত কিন্তু কোনো চক্র নেই। এর অর্থ হলো, যেকোনো এক জোড়া নোডের জন্য এক নোড থেকে অন্যটিতে পৌঁছানোর ঠিক একটি পথ থাকে।
এই অনুশীলনীটি মূলত একটি ট্রি-কে ভিন্ন দৃষ্টিকোণ থেকে দেখার জন্য নতুন করে সাজানোর বিষয়ে। যেমন বংশলতিকা সাধারণত পূর্বপুরুষের দৃষ্টিকোণ থেকে উপস্থাপন করা হয়:
+------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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।