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

स्ट्रिंग से बाइनरी ट्री का निर्माण C++ में


मान लीजिए हमारे पास एक स्ट्रिंग है जिसमें पैरेंथेसिस और पूर्णांक हैं। हमें उस स्ट्रिंग से एक बाइनरी ट्री का निर्माण करना है। पूरा इनपुट एक बाइनरी ट्री को दर्शाता है। इसमें एक पूर्णांक होता है जिसके बाद शून्य, एक या दो जोड़े पैरेंथेसिस होते हैं। पूर्णांक रूट का मान दर्शाता है और पैरेंथेसिस का एक जोड़ा उसी संरचना के साथ एक चाइल्ड बाइनरी ट्री को दर्शाता है।

उदाहरण के लिए, यदि इनपुट "4(2(3)(1))(6(5))" है, तो आउटपुट [3,2,1,4,5,6] होगा (इनऑर्डर ट्रैवर्सल)।

स्ट्रिंग से बाइनरी ट्री का निर्माण C++ में

समाधान दृष्टिकोण

इस समस्या को हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:

  • solve() फ़ंक्शन परिभाषित करें, जो s (स्ट्रिंग) और idx (इंडेक्स) लेता है।
  • यदि idx >= s.size() है, तो NULL वापस करें।
  • एक खाली स्ट्रिंग num बनाएं।
  • जब तक idx < s.size() और s[idx] न तो '(' है और न ही ')', तब तक num में कैरेक्टर जोड़ें और idx बढ़ाएं।
  • num मान से एक नया नोड बनाएं।
  • यदि idx < s.size() और s[idx] == '(' है, तो:
    • idx बढ़ाएं।
    • नोड का लेफ्ट चाइल्ड = solve(s, idx)।
    • idx बढ़ाएं।
    • यदि फिर से s[idx] == '(' है, तो:
      • idx बढ़ाएं।
      • नोड का राइट चाइल्ड = solve(s, idx)।
      • idx बढ़ाएं।
  • नोड वापस करें।
  • मेन मेथड में: idx = 0 सेट करें और solve(s, idx) कॉल करें।

उदाहरण (C++ कोड)

#include <bits/stdc++.h> 
using namespace std; 

class TreeNode { 
public: 
    int val; 
    TreeNode *left, *right; 
    TreeNode(int data) { 
        val = data; 
        left = NULL; 
        right = NULL; 
    } 
}; 

void inord(TreeNode *root) { 
    if (root != NULL) { 
        inord(root->left); 
        cout << root->val << " "; 
        inord(root->right); 
    } 
} 

class Solution { 
public: 
    TreeNode* solve(string s, int& idx) { 
        if (idx >= s.size()) 
            return NULL; 
        string num = ""; 
        while (idx < s.size() && s[idx] != '(' && s[idx] != ')') { 
            num += s[idx]; 
            idx++; 
        } 
        TreeNode* node = new TreeNode(stoi(num)); 
        if (idx < s.size() && s[idx] == '(') { 
            idx++; 
            node->left = solve(s, idx); 
            idx++; 
            if (idx < s.size() && s[idx] == '(') { 
                idx++; 
                node->right = solve(s, idx); 
                idx++; 
            } 
        } 
        return node; 
    } 
    TreeNode* str2tree(string s) { 
        int idx = 0; 
        TreeNode* temp = new TreeNode(-1); 
        return solve(s, idx); 
    } 
}; 

int main() { 
    Solution ob; 
    TreeNode *root = ob.str2tree("4(2(3)(1))(6(5))"); 
    inord(root); 
    return 0; 
}

इनपुट

"4(2(3)(1))(6(5))"

आउटपुट

3 2 1 4 5 6

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

    मान लीजिए हमें एक बाइनरी ट्री को m×n 2D स्ट्रिंग सरणी में इन नियमों के आधार पर प्रदर्शित करना है: पंक्ति संख्या m दी गई बाइनरी ट्री की ऊंचाई के समान होनी चाहिए। स्तंभ संख्या n हमेशा एक विषम संख्या होनी चाहिए। रूट नोड का मान पहली पंक्ति के ठीक बीच में रखा जाना चाहिए जहां इसे रखा जा सकता है। वह स्तं

  1. C++ में बाइनरी ट्री प्रूनिंग C++ में बाइनरी ट्री प्रूनिंग

    मान लीजिए हमारे पास एक बाइनरी ट्री का हेड नोड root है, जहाँ प्रत्येक नोड का मान या तो 0 या 1 है। हमें वही ट्री लौटाना है जहाँ हर वह सबट्री हटा दी गई हो जिसमें 1 नहीं है। उदाहरण: इनपुट ट्री [1,1,0,1,1,0,1,0] के लिए, आउटपुट ट्री में केवल वही नोड्स रहेंगे जिनके सबट्री में कम से कम एक 1 है। पोस्ट-ऑर्

  1. पायथन में बाइनरी ट्री से स्ट्रिंग बनाएं पायथन में बाइनरी ट्री से स्ट्रिंग बनाएं

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