কম্পিউটার

C++ এ একটি বাইনারি সার্চ ট্রির ইনঅর্ডার সাকসেসর খোঁজার প্রোগ্রাম


ধরুন আমাদের একটি বাইনারি সার্চ ট্রি BST এবং একটি নোডের আরেকটি মান আছে, আমাদের BST-এ সেই নোডের ইন-অর্ডার উত্তরাধিকারী খুঁজে বের করতে হবে। আমরা সবাই জানি যে একটি নোড p-এর উত্তরসূরী হল সেই নোড যার মানের চেয়ে ছোট কী আছে।

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

C++ এ একটি বাইনারি সার্চ ট্রির ইনঅর্ডার সাকসেসর খোঁজার প্রোগ্রাম

এবং p =1, তাহলে আউটপুট হবে 2,

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • পুনরাবৃত্ত পদ্ধতি সংজ্ঞায়িত করুন inorderSuccessor(), এটি রুট করবে এবং p
  • যদি রুট নাল হয়, তাহলে:
    • শূন্য রিটার্ন
  • যদি root-এর val <=p-এর val হয়, তাহলে:
    • inorderSuccessor (রুটের ডানদিকে , p) ফেরত দিন
  • অন্যথায়
    • বিকল্প :=inorderSuccessor(রুটের বামে , p)
    • রিটার্ন (যদি বিকল্প শূন্য হয়, তাহলে রুট, অন্যথায় বিকল্প)

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
class TreeNode{
   public:
   int val;
   TreeNode *left, *right;
   TreeNode(int data){
      val = data;
      left = NULL;
      right = NULL;
   }
};
class Solution {
   public:
   TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) {
      if(!root) return NULL;
         if(root->val <= p->val){
            return inorderSuccessor(root->right, p);
         }else{
            TreeNode* option = inorderSuccessor(root->left, p);
            return !option ? root : option;
      }
   }
};
main(){
   TreeNode *root = new TreeNode(2);
   root->left = new TreeNode(1);
   root->right = new TreeNode(3);
   TreeNode *p = root->left;
   Solution ob;
   cout << (ob.inorderSuccessor(root, p))->val;
}

ইনপুট

TreeNode *root = new TreeNode(2);
root->left = new TreeNode(1);
root->right = new TreeNode(3);
1

আউটপুট

2

  1. C++ এ বাইনারি সার্চ ট্রি ইটারেটার

  2. C++ এ বাইনারি ট্রি থেকে বাইনারি সার্চ ট্রি কনভার্সন

  3. C++ প্রোগ্রামে বাইনারি অনুসন্ধান?

  4. একটি বাইনারি অনুসন্ধান গাছে বাম ঘূর্ণন সম্পাদনের জন্য C++ প্রোগ্রাম