Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में दिए गए बाइनरी ट्री को डौबली लिंक्ड लिस्ट में बदलें (सेट 2)


इस ट्यूटोरियल में, हम एक प्रोग्राम पर चर्चा करेंगे जो बाइनरी ट्री को डौबली लिंक्ड लिस्ट में बदलता है।

इसके लिए हमें एक बाइनरी ट्री दिया जाएगा। हमारा कार्य इसे डौबली लिंक्ड लिस्ट में बदलना है जैसे कि लेफ्ट और राइट पॉइंटर प्रीवियस और नेक्स्ट पॉइंटर बन जाएं। साथ ही डौबली लिंक्ड लिस्ट का क्रमिक क्रम बाइनरी ट्री के इनऑर्डर ट्रैवर्सल के बराबर होना चाहिए।

इसके लिए हमारे पास एक अलग दृष्टिकोण है। हम बाइनरी ट्री को रिवर्स इनऑर्डर तरीके से ट्रैवर्स करेंगे। साथ ही हम नए नोड्स बनाएंगे और हेड पॉइंटर को नवीनतम पर ले जाएंगे; यह डौबली लिंक्ड लिस्ट को अंत से शुरुआत तक बनाएगा।

उदाहरण

#include <stdio.h> 
#include <stdlib.h> 

//ट्री के लिए नोड स्ट्रक्चर
struct Node {
    int data;
    Node *left, *right;
};

//बाइनरी ट्री को डौबली लिंक्ड लिस्ट में बदलना
void binary_todll(Node* root, Node** head_ref) {
    if (root == NULL)
        return;
    
    //राइट सबट्री को बदलना
    binary_todll(root->right, head_ref);
    
    //रूट मान को डौबली लिंक्ड लिस्ट में डालना
    root->right = *head_ref;
    
    //हेड पॉइंटर को मूव करना
    if (*head_ref != NULL)
        (*head_ref)->left = root;
    *head_ref = root;
    
    //लेफ्ट सबट्री को बदलना
    binary_todll(root->left, head_ref);
}

//डौबली लिंक्ड लिस्ट के लिए नया नोड आवंटित करना
Node* newNode(int data) {
    Node* node = new Node;
    node->data = data;
    node->left = node->right = NULL;
    return node;
}

//डौबली लिंक्ड लिस्ट प्रिंट करना
void print_dll(Node* head) {
    printf("Doubly Linked list:\n");
    while (head) {
        printf("%d ", head->data);
        head = head->right;
    }
}

int main() {
    Node* root = newNode(5);
    root->left = newNode(3);
    root->right = newNode(6);
    root->left->left = newNode(1);
    root->left->right = newNode(4);
    root->right->right = newNode(8);
    root->left->left->left = newNode(0);
    root->left->left->right = newNode(2);
    root->right->right->left = newNode(7);
    root->right->right->right = newNode(9);
    
    Node* head = NULL;
    binary_todll(root, &head);
    print_dll(head);
    return 0;
}

आउटपुट

Doubly Linked list: 0 1 2 3 4 5 6 7 8 9

  1. C++ में बाइनरी ट्री में लिंक्ड लिस्ट C++ में बाइनरी ट्री में लिंक्ड लिस्ट

    मान लीजिए हमारे पास एक बाइनरी ट्री रूट और एक लिंक्ड लिस्ट है जिसका हेड पहला नोड है। हमें True लौटाना है अगर लिंक्ड लिस्ट में हेड से शुरू होने वाले सभी एलिमेंट्स बाइनरी ट्री में किसी डाउनवर्ड पथ से मेल खाते हैं, अन्यथा False। उदाहरण के लिए, अगर ट्री है: और लिंक्ड लिस्ट [1,4,2,6] है, तो आउटपुट true

  1. C++ में बाइनरी ट्री को लिंक्ड लिस्ट में फ्लैट करना C++ में बाइनरी ट्री को लिंक्ड लिस्ट में फ्लैट करना

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें इसे स्थानांतरित (in-place) करके लिंक्ड लिस्ट में बदलना है (दायाँ पॉइंटर अगले नोड को इंगित करे, बायाँ पॉइंटर null हो)। उदाहरण: ट्री [1,2,5,3,4] → फ्लैट लिस्ट: 1→2→3→4→5 (प्रीऑर्डर ट्रैवर्सल क्रम)। रिवर्स प्रीऑर्डर ट्रैवर्सल ग्लोबल prev = null रखें। रिकर

  1. C++ में जांचें कि दिया गया बाइनरी ट्री सम-ट्री है या नहीं C++ में जांचें कि दिया गया बाइनरी ट्री सम-ट्री है या नहीं

    यहां हम देखेंगे कि बाइनरी ट्री सम-ट्री (SumTree) है या नहीं, इसकी जांच कैसे करें। अब सवाल यह है कि सम-ट्री क्या है। एक सम-ट्री एक बाइनरी ट्री है जहां एक नोड अपने बच्चों के योग का मान रखता है। ट्री का रूट उसके नीचे के सभी तत्वों का पूरा योग रखता है। यह सम-ट्री का एक उदाहरण है -इसे जांचने के लिए, हम ए