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

C++ में ब्रैकेट के साथ बाइनरी ट्री को स्ट्रिंग में बदलें

इस समस्या में, हमें एक बाइनरी ट्री दिया गया है। हमारा कार्य एक ऐसा प्रोग्राम बनाना है जो बाइनरी ट्री को C++ में ब्रैकेट के साथ स्ट्रिंग में परिवर्तित करे।

बाइनरी ट्री के मान इंटीजर हैं और उन्हें प्रीऑर्डर ट्रैवर्सल तरीके से प्रोग्राम में दिया जाएगा। स्ट्रिंग में केवल इंटीजर और पैरेंथीसिस () होने चाहिए, साथ ही यह ऑप्टिमाइज़्ड होनी चाहिए यानी सभी खाली जोड़े हटा दिए जाने चाहिए।

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

बाइनरी ट्री का उदाहरण

C++ में ब्रैकेट के साथ बाइनरी ट्री को स्ट्रिंग में बदलें

प्रीऑर्डर ट्रैवर्सल: [4, 1, 8, 3, 9, 2, 5]

समस्या को समझने के लिए उदाहरण

इनपुट

प्रीऑर्डर: [4, 1, 8, 3, 9, 2, 5]

C++ में ब्रैकेट के साथ बाइनरी ट्री को स्ट्रिंग में बदलें

आउटपुट

व्याख्या

रूट -> 4()() -> 4(1()())(9) -> 4(1(8()())())(9) -> 4(1(8(3)())())(9) -> 4(1(8(3)())())(9(2)(5))

सभी खाली पैरेंथीसिस हटाने के बाद,

4(1(8(3)))(9(2)(5))

अब, आइए समस्या को हल करें। हम बाइनरी ट्री का प्रीऑर्डर ट्रैवर्सल करेंगे और जहां आवश्यक हो वहां ब्रैकेट रखेंगे। साथ ही, हमें अतिरिक्त ब्रैकेट जोड़े को हटाना होगा। इसके लिए, हम एक फ़ंक्शन को रिकर्सिवली कॉल करेंगे जो ब्रैकेट रखेगा।

हम एक नोड को प्रिंट करेंगे और उस नोड के दोनों चाइल्ड के लिए रिकर्सिव फ़ंक्शन को तब तक कॉल करेंगे जब तक नोड के लिए कोई चाइल्ड न बचे यानी लीफ नोड।

नोड के चाइल्ड नोड्स के लिए फ़ंक्शन कॉल करते समय हम इन 4 मामलों का सामना करेंगे:

केस 1 - जब नोड के दोनों चाइल्ड नोड्स मौजूद हों। हम दोनों चाइल्ड के लिए ब्रैकेट रखेंगे और उनके मान ब्रैकेट के अंदर रखेंगे और यदि उनके चाइल्ड हों तो उन्हें कॉल करेंगे।

उदाहरण - ऊपर दिए गए उदाहरण में रूट नोड 4 के लिए जहां दोनों चाइल्ड नोड्स मौजूद हैं, 4(1)(9)।

केस 2 - जब नोड का केवल लेफ्ट चाइल्ड हो। हम लेफ्ट चाइल्ड को ब्रैकेट में रखेंगे, चूंकि कोई राइट चाइल्ड नहीं है इसलिए उसका ब्रैकेट हटा दिया जाएगा। और केवल लेफ्ट चाइल्ड के सबट्री को कॉल किया जाएगा यदि कोई हो।

उदाहरण - मान 1 वाले नोड के लिए जहां केवल लेफ्ट चाइल्ड नोड मौजूद है, 4(1(8()()))(9)।

केस 3 - जब नोड का केवल राइट चाइल्ड हो। हम लेफ्ट चाइल्ड के लिए एक खाली ब्रैकेट रखेंगे। और राइट चाइल्ड का मान रखा जाएगा और यदि उसके सब-ट्री हों तो उन्हें कॉल किया जाएगा।

केस 4 - जब नोड का कोई चाइल्ड न हो (लीफ नोड)। हम कोई ब्रैकेट नहीं रखेंगे और केवल मान रखेंगे।

उदाहरण - मान 5 वाले नोड्स के लिए जहां कोई चाइल्ड नहीं है, 4(1(8(3)))(9(2)(5()()))।

बाइनरी ट्री को ब्रैकेट के साथ स्ट्रिंग में बदलने का प्रोग्राम

// ब्रैकेट के साथ बाइनरी ट्री को स्ट्रिंग में बदलने का प्रोग्राम

उदाहरण

#include <iostream>
using namespace std;

struct Node {
    int data;
    Node *left, *right;
};

Node* insertNode(int data) {
    Node* node = (Node*)malloc(sizeof(Node));
    node->data = data;
    node->left = node->right = NULL;
    return (node);
}

void ConvertBinaryTreeToString(Node* root, string& str) {
    if (root == NULL)
        return;
    str.push_back(root->data + '0');
    if (!root->left && !root->right)
        return;
    str.push_back('(');
    ConvertBinaryTreeToString(root->left, str);
    str.push_back(')');
    if (root->right) {
        str.push_back('(');
        ConvertBinaryTreeToString(root->right, str);
        str.push_back(')');
    }
}

int main() {
    struct Node* root = insertNode(4);
    root->left = insertNode(1);
    root->right = insertNode(9);
    root->left->left = insertNode(8);
    root->left->left->left = insertNode(3);
    root->right->left = insertNode(2);
    root->right->right = insertNode(5);
    string binaryTreeString = "";
    ConvertBinaryTreeToString(root, binaryTreeString);
    cout << "ब्रैकेट के साथ बाइनरी ट्री का प्रीऑर्डर ट्रैवर्सल स्ट्रिंग है: " << binaryTreeString;
}

आउटपुट

ब्रैकेट के साथ बाइनरी ट्री का प्रीऑर्डर ट्रैवर्सल स्ट्रिंग है: 4(1(8(3)))(9(2)(5))
  1. C++ में बाइनरी ट्री कैमरे C++ में बाइनरी ट्री कैमरे

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हम ट्री के नोड्स पर कैमरे लगाते हैं। अब प्रत्येक कैमरा एक नोड पर अपने माता-पिता, स्वयं और अपने बच्चों की निगरानी कर सकता है। हमें ट्री के सभी नोड्स की निगरानी के लिए आवश्यक कैमरों की न्यूनतम संख्या ज्ञात करनी है। यदि इनपुट है - तो आउटपुट 1 होगा, क्योंकि सभी क

  1. C++ में बाइनरी ट्री में नोड का पोस्टऑर्डर सक्सेसर C++ में बाइनरी ट्री में नोड का पोस्टऑर्डर सक्सेसर

    इस समस्या में, हमें एक बाइनरी ट्री और एक नोड दिया गया है। हमारा कार्य बाइनरी ट्री में उस नोड का पोस्टऑर्डर सक्सेसर प्रिंट करना है।बाइनरी ट्री एक विशेष प्रकार का ट्री है जिसमें प्रत्येक नोड में अधिकतम 2 चाइल्ड नोड हो सकते हैं।पोस्टऑर्डर ट्रैवर्सल एक ट्री ट्रैवर्सल तकनीक है, जिसमें पहले बाएं सबट्री को

  1. C++ में बाइनरी सर्च ट्री में न्यूनतम मान वाला नोड ज्ञात करें C++ में बाइनरी सर्च ट्री में न्यूनतम मान वाला नोड ज्ञात करें

    मान लीजिए हमारे पास एक बाइनरी सर्च ट्री है। हमें बाइनरी सर्च ट्री में न्यूनतम तत्व ढूंढना है। इसलिए यदि BST नीचे की तरह है: न्यूनतम तत्व 1 होगा। जैसा कि हम जानते हैं कि बायां उपट्री हमेशा छोटे तत्वों को धारण करता है। इसलिए यदि हम बाएं उपट्री के माध्यम से तब तक ट्रैवर्स करते हैं जब तक बायां NULL नही