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

আউটপুট −
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 ইত্যাদি ভাষায়ও লিখা যায়। আশা করি আপনি এই টিউটোরিয়ালটি সহায়ক পাবেন।