এই টিউটোরিয়ালে আমরা একটি বাইনারি ট্রিকে সার্কুলার ডাবলি লিংকড লিস্ট-এ রূপান্তর করার একটি প্রোগ্রাম নিয়ে আলোচনা করব।
এখানে একটি বাইনারি ট্রি দেওয়া থাকবে। আমাদের কাজ হবে বাম এবং ডান নোডগুলোকে যথাক্রমে বাম এবং ডান উপাদান-এ রূপান্তর করা। এবং বাইনারি ট্রির ইনঅর্ডার কে সার্কুলার লিংকড লিস্টের ক্রম ধরা হবে।
উদাহরণ
#include <iostream>
using namespace std;
// বাইনারি ট্রির নোড স্ট্রাকচার
struct Node {
struct Node *left, *right;
int data;
};
// রাইটলিস্টকে লেফটলিস্টের শেষে অ্যাপেন্ড করা
Node* concatenate(Node* leftList, Node* rightList) {
// যদি একটি লিস্ট খালি হয়, অন্যটি রিটার্ন করুন
if (leftList == NULL)
return rightList;
if (rightList == NULL)
return leftList;
Node* leftLast = leftList->left;
Node* rightLast = rightList->left;
// লেফটলিস্টকে রাইটলিস্টের সাথে সংযুক্ত করা
leftLast->right = rightList;
rightList->left = leftLast;
leftList->left = rightLast;
rightLast->right = leftList;
return leftList;
}
// সার্কুলার লিংকড লিস্ট-এ রূপান্তর করে হেড রিটার্ন
Node* bTreeToCList(Node* root) {
if (root == NULL)
return NULL;
Node* left = bTreeToCList(root->left);
Node* right = bTreeToCList(root->right);
root->left = root->right = root;
return concatenate(concatenate(left, root), right);
}
// সার্কুলার লিংকড লিস্ট প্রদর্শন
void print_Clist(Node* head) {
cout << "Circular Linked List is:\n";
Node* itr = head;
do {
cout << itr->data << " ";
itr = itr->right;
} while (head != itr);
cout << "\n";
}
// নতুন নোড তৈরি করে ঠিকানা রিটার্ন
Node* newNode(int data) {
Node* temp = new Node();
temp->data = data;
temp->left = temp->right = NULL;
return temp;
}
int main() {
Node* root = newNode(10);
root->left = newNode(12);
root->right = newNode(15);
root->left->left = newNode(25);
root->left->right = newNode(30);
root->right->left = newNode(36);
Node* head = bTreeToCList(root);
print_Clist(head);
return 0;
}
আউটপুট
Circular Linked List is: 25 12 30 10 36 15