কম্পিউটার টিউটোরিয়াল

C++ দিয়ে সর্বোচ্চ বেণ্ড (Bends) Barney পথের দৈর্ঘ্য বের করা

একটি সমস্যা সমাধান করতে হবে যেখানে একটি বাইনারি ট্রি দেওয়া আছে। এখন আমাদের সেই পথটি বের করতে হবে যাতে সর্বোচ্চ বেণ্ড (bends) থাকে। বেণ্ড মানে পথের দিক পরিবর্তন, বাম থেকে ডানে বা ডান থেকে বামে। উদাহরণ −

ইনপুট −

C++ দিয়ে সর্বোচ্চ বেণ্ড (Bends) Barney পথের দৈর্ঘ্য বের করা

আউটপুট −

6

এই পদ্ধতিতে, আমরা ট্রি ট্রাভার্স করব এবং পূর্বের মুভমেন্ট ট্র্যাক করব। যদি দিক পরিবর্তন হয়, তবে বেণ্ড কাউন্ট আপডেট করব এবং সর্বোচ্চটি বের করব।

সমাধানের পদ্ধতি

এই পদ্ধতিতে, আমরা সব পথ ট্রাভার্স করব এবং সর্বোচ্চ বেণ্ড বের করে আপডেট করব।

উদাহরণ
 #include <bits/stdc++.h> using namespace std; struct Node { // নোড স্ট্রাকচার     int key;     struct Node* left;     struct Node* right; }; struct Node* newNode(int key){ // নোড ইনিশিয়ালাইজ     struct Node* node = new Node();     node->left = NULL;     node->right = NULL;     node->key = key;     return node; } void maximumBends(struct Node* node, char direction, int bends,                     int* maxBends, int soFar, int* len){     if (node == NULL) return;     if (node->left == NULL && node->right == NULL) { // লিফ নোড পেলে         if (bends > *maxBends) { // সর্বোচ্চ বেণ্ড আপডেট             *maxBends = bends;             *len = soFar;         }     }     else {         if (direction == 'l') { // বর্তমান দিক বাম             maximumBends(node->left, direction, bends, maxBends, soFar + 1, len);             maximumBends(node->right, 'r', bends + 1, maxBends, soFar + 1, len); // দিক বদল => বেণ্ড বাড়ল         }         else { // বর্তমান দিক ডান             maximumBends(node->right, direction, bends, maxBends, soFar + 1, len);             maximumBends(node->left, 'l', bends + 1, maxBends, soFar + 1, len); // একইভাবে         }     } } int main(){     struct Node* root = newNode(10);     root->left = newNode(8);     root->right = newNode(2);     root->left->left = newNode(3);     root->left->right = newNode(5);     root->right->left = newNode(2);     root->right->left->right = newNode(1);     root->right->left->right->left = newNode(9);     int len = 0, bends = 0, maxBends = -1;     if(!root) cout << "0\n";     else{         if (root->left) maximumBends(root->left, 'l', bends, &maxBends, 1, &len);         if (root->right) maximumBends(root->right, 'r', bends, &maxBends, 1, &len);         cout << len << "\n";     }     return 0; }
আউটপুট
4
কোডের ব্যাখ্যা

উপরের পদ্ধতিতে, আমরা সহজে সব পথ ট্রাভার্স করি এবং এতক্ষণ পর্যন্ত পাওয়া যাওয়া বেণ্ড গণনা করি। যখন পথের শেষে পৌঁছাই (লিফ নোড), তখন চেক করি বেণ্ডটি পূর্বের সর্বোচ্চের চেয়ে বড় কিনা। সত্য হলে সর্বোচ্চ বেণ্ড এবং সেই পথের দৈর্ঘ্য আপডেট করি। এভাবেই প্রোগ্রামটি কাজ করে।

উপসংহার

এই টিউটোরিয়ালে আমরা সর্বোচ্চ বেণ্ড barne পথের দৈর্ঘ্য বের করার সমস্যা সমাধান করেছি। আমরা এই সমস্যার C++ প্রোগ্রাম ও সম্পূর্ণ পদ্ধতি দেখেছি। একই প্রোগ্রাম C, Java, Python ইত্যাদি ভাষায়ও লিখা যায়। আশা করি আপনি এই টিউটোরিয়ালটি সহায়ক পাবেন।

  1. সি++-এ বাইনারি ট্রিতে সর্বোচ্চ последователь পথের দৈর্ঘ্য

  2. C++-এ ত্রিভুজে সর্বোচ্চ পথ যোগফল

  3. C++-এ বাইপার্টাইট গ্রাফে সর্বোচ্চ এজ সংখ্যা

  4. C++-এ ০ এবং ১-এর সেগমেন্টের সর্বোচ্চ দৈর্ঘ্য