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

C++ में मनमाने बाइनरी ट्री को चिल्ड्रन सम प्रॉपर्टी (Children Sum Property) वाले ट्री में परिवर्तित करें


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

इसके लिए हमें एक बाइनरी ट्री प्रदान की जाएगी। हमारा कार्य इसे उस बाइनरी ट्री में परिवर्तित करना है जो चिल्ड्रन सम प्रॉपर्टी का पालन करता है। लेकिन प्रतिबंध यह है कि हम केवल नोड्स में मौजूद मानों को बढ़ा सकते हैं, न तो ट्री की संरचना बदल सकते हैं और न ही नोड में मान घटा सकते हैं।

उदाहरण

#include<iostream> #include<bits/stdc++.h> using namespace std; //बाइनरी ट्री के लिए नोड संरचना class node{    public:    int data;    node* left;    node* right;    नया नोड बनाना    node(int data){       this->data = data;       this->left = NULL;       this->right = NULL;    } }; //बाएं उपट्री को बढ़ाना void increment(node* node, int diff); //ट्री परिवर्तित करने का मुख्य फ़ंक्शन void convert_Btree(node* node){    int left_data = 0, right_data = 0, diff;    रूट या लीफ नोड के मामले में सच वापस करना    if (node == NULL || (node->left == NULL && node->right == NULL))    return;    else {       //बाएं और दाएं उपट्री को परिवर्तित करना       convert_Btree(node->left);       convert_Btree(node->right);       if (node->left != NULL)          left_data = node->left->data;       if (node->right != NULL)          right_data = node->right->data;       //चिल्ड्रन सम प्राप्त करना       diff = left_data + right_data - node->data;       //यदि चिल्ड्रन सम नोड डेटा से बड़ा है       if (diff > 0)          node->data = node->data + diff;       if (diff > 0)          increment(node, -diff);    } } //नोड मान बढ़ाना void increment(node* node, int diff){    if(node->left != NULL) {       node->left->data = node->left->data + diff;       //ट्री में रिकर्सिवली आगे बढ़ना       increment(node->left, diff);    }    else if (node->right != NULL) {       node->right->data = node->right->data + diff;       increment(node->right, diff);    } } //इनऑर्डर ट्रैवर्सल प्रिंट करना void printInorder(node* node){    if (node == NULL)       return;    printInorder(node->left);    cout<<node->data<<" ";    printInorder(node->right); } int main(){    node *root = new node(50);    root->left = new node(7);    root->right = new node(2);    root->left->left = new node(3);    root->left->right = new node(5);    root->right->left = new node(1);    root->right->right = new node(30);    cout << "Before conversion: " << endl;    printInorder(root);    convert_Btree(root);    cout << "\nAfter conversion: " << endl;    printInorder(root);    return 0; }

आउटपुट

Before conversion: 3 7 5 50 1 2 30 After conversion: 14 19 5 50 1 31 30

  1. C++ में बाइनरी ट्री में अधिकतम पथ योग C++ में बाइनरी ट्री में अधिकतम पथ योग

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

  1. बाइनरी ट्री में अधिकतम वर्टिकल योग खोजें C++ में बाइनरी ट्री में अधिकतम वर्टिकल योग खोजें C++ में

    मान लीजिए हमारे पास एक बाइनरी ट्री है। कार्य वर्टिकल ऑर्डर ट्रैवर्सल में सभी नोड्स के योग के अधिकतम को प्रिंट करना है। तो यदि ट्री नीचे जैसा है - वर्टिकल ऑर्डर ट्रैवर्सल इस तरह है - 4 2 1 + 5 + 6 = 12 3 + 8 = 11 7 9 यहां अधिकतम 12 है। दृष्टिकोण सरल है। हम वर्टिकल ऑर्डर ट्रैवर्सल करेंगे, फिर योग खोज

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

    मान लीजिए हमारे पास एक बाइनरी ट्री है। बाइनरी ट्री वैध है जब यह निम्न गुण को पूरा करता है।प्रत्येक नोड में डेटा मान अपने बाएं और दाएं बच्चों के मानों के योग के समान होना चाहिए। यदि किसी भी तरफ कोई बच्चे नहीं हैं, तो इसे 0 माना जाएगा।मान लीजिए एक ट्री नीचे जैसा मौजूद है, जो दिए गए गुण को पूरा करता है