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

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


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

সুতরাং, যদি ইনপুট এমন হয়:

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

তब আউটপুট হবে ৩ কারণ (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) ফেরত দিন

উদাহরণ (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

  1. বাইনারি ট্রির সর্বোচ্চ প্রস্থ C++-এ

  2. সর্বোচ্চ বাইনারি ট্রি নির্মাণ C++-এ

  3. C++-এ বাইনারি ট্রিতে সর্বোচ্চ স্পাইরাল যোগফল

  4. C++-এ বাইনারি ট্রিতে সর্বোচ্চ পথ যোগফল