আমরা পুনরাবৃত্ত পদ্ধতিতে বিএসটি-তে নতুন নোড সন্নিবেশ করতে পারি। সেক্ষেত্রে আমরা প্রতিটি সাবট্রির রুটের ঠিকানা ফেরত দিই। এখানে আমরা আরেকটি পদ্ধতি দেখব, যেখানে প্যারেন্ট পয়েন্টার বজায় রাখতে হবে। প্যারেন্ট পয়েন্টার একটি নোড ইত্যাদির পূর্বপুরুষ খুঁজে পেতে সহায়ক হবে।
ধারণা হল বাম এবং ডান সাবট্রিগুলির ঠিকানা সংরক্ষণ করা, আমরা রিকার্সিভ কলের পরে ফিরে আসা পয়েন্টারগুলির মূল পয়েন্টার সেট করি। এটি নিশ্চিত করে যে সমস্ত অভিভাবক পয়েন্টার সন্নিবেশের সময় সেট করা আছে। রুটের প্যারেন্ট নাল সেট করা হয়েছে।
অ্যালগরিদম
সন্নিবেশ (নোড, কী) -
নোড নাল থাকলে শুরু করুন, তারপর একটি নতুন নোড তৈরি করুন এবং কীটি নোডের কী থেকে কম হলে ফেরত দিন, তারপর কী দিয়ে একটি নতুন নোড তৈরি করুন বাম পয়েন্টার দিয়ে নতুন নোড যোগ করুন বা নোডটি বড় হলে বা নোডের কী সমান, তারপর কী দিয়ে একটি নতুন নোড তৈরি করুন নোডের প্রান্তের ডান পয়েন্টারে নতুন নোড যোগ করুন যদি নোডিন্ড রিটার্ন করুনউদাহরণ
#includenamespace ব্যবহার করে std;class Node { public:int data; নোড *বাম, *ডান, *পিতামাতা;};স্ট্রাকট নোড *গেটনোড(int আইটেম) { নোড *টেম্প =নতুন নোড; temp->ডেটা =আইটেম; temp->left =temp->right=temp->parent =NULL; রিটার্ন temp;} void inorderTraverse(struct Node *root) { if (root !=NULL) { inorderTraverse(root->left); cout < ডেটা <<" "; if (root->parent ==NULL) cout <<"NULL" < parent->data < ডান); }}struct Node* insert(struct Node* node, int key) { if (node ==NULL) getNode(key); যদি (কী <নোড->ডেটা) { // বাম সাবট্রি নোড *লেফট_চাইল্ড =ইনসার্ট(নোড->বাম, কী); node->left =left_child; left_child->অভিভাবক =নোড; } else if (key> node->data) {// to right subtree Node *right_child =insert(node->right, key); node->right =right_child; right_child->অভিভাবক =নোড; } return node;}int main() { struct Node *root =NULL; root =insert(root, 100); সন্নিবেশ (মূল, 60); সন্নিবেশ (মূল, 40); সন্নিবেশ (মূল, 80); সন্নিবেশ (মূল, 140); সন্নিবেশ (রুট, 120); সন্নিবেশ (রুট, 160); inorderTraverse(root);}
আউটপুট
40 6060 10080 60100 NULL120 140140 100160 140