এই সমস্যায়, আমরা একটি বাইনারি গাছ দেওয়া হয়. এবং আমাদের মূল থেকে গাছের পাতা পর্যন্ত সমস্ত পথ প্রিন্ট করতে হবে। এছাড়াও, নোডের আপেক্ষিক অবস্থান দেখাতে আন্ডারস্কোর “_” যোগ করুন।
বিষয়টি আরও ভালোভাবে বোঝার জন্য একটি উদাহরণ নেওয়া যাক -
ইনপুট -
আউটপুট -
<প্রে>_ _ 3_ 91_39_73_ 4_ _ 239 41 7 6 23_ 46এই সমস্যা সমাধানের জন্য, আমরা গাছের উপাদানগুলির উল্লম্ব ক্রম ধারণাটি ব্যবহার করব।
এর উপর ভিত্তি করে, আমরা মূল থেকে পাতা পর্যন্ত পথ প্রিন্ট করব।
অ্যালগরিদম
ধাপ 1:প্রি-অর্ডার ট্রাভার্সাল ব্যবহার করে বাইনারি ট্রিটি অতিক্রম করুন। এবং ট্রাভার্সালে অর্ডারের উপর ভিত্তি করে অনুভূমিক দূরত্ব গণনা করুন। রুটের অনুভূমিক দূরত্ব হল 0 এবং উপরের চিত্রের মতো প্রক্রিয়া করা হয়েছে৷ ধাপ 2:এবং লিফ নোডে যাওয়ার সময়, শেষে একটি আন্ডারস্কোর "_" দিয়ে পথটি প্রিন্ট করুন৷
উদাহরণ
#includeনেমস্পেস std ব্যবহার করে;#ডিফাইন MAX_PATH_SIZE 1000struct নোড{char data; নোড *বাম, *ডান;};নোড * newNode(char data){ struct Node *temp =new Node; temp->ডেটা =ডেটা; temp->left =temp->right =NULL; রিটার্ন temp;}struct PATH{ int horizontalDistance; char key;};void printPath(ভেক্টর পথ, int সাইজ){ int ন্যূনতম horizontalDistance =INT_MAX; PATH পি; জন্য (int it=0; it &AllPath, int horizontalDistance, int order ){ if(root ==NULL) রিটার্ন; যদি (root->left ==NULL &&root->right ==NULL){ AllPath[order] =(PATH { অনুভূমিক দূরত্ব, রুট-> ডেটা }); প্রিন্টপাথ(অলপাথ, অর্ডার+1); প্রত্যাবর্তন } AllPath[order] =(PATH { অনুভূমিক দূরত্ব, রুট->ডেটা }); printAllRtLPpaths(root->left, AllPath, horizontalDistance-1, order+1); printAllRtLPpaths(root->right, AllPath, horizontalDistance+1, order+1);}void printRootToLeafPath(নোড *root){ যদি (root ==NULL) ফেরত আসে; ভেক্টর Allpaths(MAX_PATH_SIZE); printAllRtLPpaths(root, Allpaths, 0, 0);}int main(){ Node *root =newNode('3'); root->left =newNode('9'); root->right =newNode('4'); root->left->left =newNode('1'); root->left->right =newNode('7'); root->right->left =newNode('6'); root->right->right =newNode('2'); printRootToLeafPath(রুট); রিটার্ন 0;
আউটপুট
_ _ 3_ 91 পরবর্তী পথ_ 39_ 7 পরবর্তী পথ3_ 46 পরবর্তী পথ3_ 4_ _ 2