মান লিইয়ে নিই আমাদের কাছে একটি বাইনারি ট্রি রয়েছে; আমাদের নোডগুলোর একটি পথের দৈর্ঘ্য গণনা করতে হবে যাতে নোডগুলোর মান ক্রমবর্ধমান ক্রমে থাকে। প্রতিটি নোডকে দৈর্ঘ্য ১-এর একটি পথ হিসেবে বিবেচনা করা হবে।
সুতরাং, যদি ইনপুট এমন হয়:

তब আউটপুট হবে ৩ কারণ (11, 12, 13) সর্বোচ্চ ক্রমবর্ধমান পথ।
সমাধান পদ্ধতি
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
- एक solve() ফাংশন সংজ্ঞায়িত করুন, যা রুট, prev_data, prev_length গ্রহণ করবে,
- যদি রুট নন-জিরো না হয়, তবে:
- prev_length ফেরত দিন
- cur_data := রুটের মান
- যদি cur_data, prev_data + 1 এর সমান হয়, তবে:
- সর্বোচ্চ মান ফেরত দিন: solve(রুটের বাম, cur_data, prev_length+1) এবং solve(রুটের ডান, cur_data, prev_length+1)
- newPathLen := সর্বোচ্চ মান: solve(রুটের বাম, cur_data, 1) এবং solve(রুটের ডান, cur_data, 1)
- সর্বোচ্চ মান ফেরত দিন: prev_length এবং newPathLen
- মূল পদ্ধতিতে নিম্নলিখিত কাজ করুন:
- যদি রুট NULL-এর সমান হয়, তবে:
- ০ ফেরত দিন
- solve(রুট, রুটের মান-1, 0) ফেরত দিন
- যদি রুট NULL-এর সমান হয়, তবে:
উদাহরণ (C++)
বेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
#include <bits/stdc++.h> using namespace std; class TreeNode { public: int val; TreeNode *left, *right; TreeNode(int data) { val = data; left = NULL; right = NULL; } }; int solve(TreeNode *root, int prev_data, int prev_length){ if (!root) return prev_length; int cur_data = root->val; if (cur_data == prev_data+1){ return max(solve(root->left, cur_data, prev_length+1), solve(root->right, cur_data, prev_length+1)); } int newPathLen = max(solve(root->left, cur_data, 1), solve(root->right, cur_data, 1)); return max(prev_length, newPathLen); } int maxLen(TreeNode *root){ if (root == NULL) return 0; return solve(root, root->val-1, 0); } int main(){ TreeNode *root = new TreeNode(10); root->left = new TreeNode(11); root->right = new TreeNode(9); root->left->left = new TreeNode(13); root->left->right = new TreeNode(12); root->right->left = new TreeNode(13); root->right->right = new TreeNode(8); cout << maxLen(root); return 0; }
इनपुट
TreeNode *root = new TreeNode(10); root->left = new TreeNode(11); root->right = new TreeNode(9); root->left->left = new TreeNode(13); root->left->right = new TreeNode(12); root->right->left = new TreeNode(13); root->right->right = new TreeNode(8);
आउटपुट
3