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

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


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

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

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

उदाहरण

#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

  1. C++ में अधिकतम बाइनरी ट्री निर्माण C++ में अधिकतम बाइनरी ट्री निर्माण

    मान लीजिए हमारे पास एक पूर्णांक सरणी है जिसके सभी तत्व अद्वितीय हैं। एक अधिकतम बाइनरी ट्री निम्न नियमों से बनता है: रूट सरणी का अधिकतम तत्व होता है। बायाँ सबट्री अधिकतम तत्व के बाएँ भाग से बने सबसरणी का अधिकतम ट्री होता है। दायाँ सबट्री अधिकतम तत्व के दाएँ भाग से बने सबसरणी का अधिकतम ट्री होता है।

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

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

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

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