इस ट्यूटोरियल में, हम एक प्रोग्राम पर चर्चा करेंगे जो बाइनरी ट्री को डौबली लिंक्ड लिस्ट में बदलता है।
इसके लिए हमें एक बाइनरी ट्री दिया जाएगा। हमारा कार्य इसे डौबली लिंक्ड लिस्ट में बदलना है जैसे कि लेफ्ट और राइट पॉइंटर प्रीवियस और नेक्स्ट पॉइंटर बन जाएं। साथ ही डौबली लिंक्ड लिस्ट का क्रमिक क्रम बाइनरी ट्री के इनऑर्डर ट्रैवर्सल के बराबर होना चाहिए।
इसके लिए हमारे पास एक बहुत सीधा दृष्टिकोण है। हम बाइनरी ट्री को इनऑर्डर तरीके से ट्रैवर्स करेंगे और साथ में डौबली लिंक्ड लिस्ट के नोड्स बनाएंगे और अंत में लेफ्ट और राइट को क्रमशः प्रीवियस और नेक्स्ट नोड्स बना देंगे।
उदाहरण
#include <iostream>
using namespace std;
//बाइनरी ट्री का नोड स्ट्रक्चर
struct node {
int data;
node* left;
node* right;
};
//ट्रैवर्स करना और डौबली लिंक्ड लिस्ट के लिए नोड्स बनाना
void binarytodll(node* root, node** head) {
if (root == NULL)
return;
static node* prev = NULL;
//लेफ्ट सबट्री को बदलना
binarytodll(root->left, head);
if (prev == NULL)
*head = root;
else {
root->left = prev;
prev->right = root;
}
prev = root;
//राइट सबट्री को बदलना
binarytodll(root->right, head);
}
//नया नोड आवंटित करना
node* newNode(int data) {
node* new_node = new node;
new_node->data = data;
new_node->left = new_node->right = NULL;
return (new_node);
}
//डौबली लिंक्ड लिस्ट के नोड्स प्रिंट करना
void print_dll(node* node) {
while (node != NULL) {
cout << node->data << " ";
node = node->right;
}
}
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 = NULL;
binarytodll(root, &head);
print_dll(head);
return 0;
}
आउटपुट
25 12 30 10 36 15