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

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

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

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

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

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक फ़ंक्शन हल करें () को परिभाषित करें, इसमें s, idx,

    . लगेगा
  • अगर idx>=s का आकार, तो −

    • वापसी शून्य

  • संख्या:=खाली स्ट्रिंग

  • जबकि (idx <आकार का s और s[idx] '(' के बराबर नहीं है और s[idx] बराबर नहीं है ')'), करते हैं -

    • संख्या :=संख्या + s[idx]

    • (आईडीएक्स को 1 से बढ़ाएं)

  • नोड =मान संख्या के साथ नया नोड

  • यदि idx

    • (आईडीएक्स को 1 से बढ़ाएं)

    • नोड के बाएँ :=हल करें(s, idx)

    • (आईडीएक्स को 1 से बढ़ाएं)

    • यदि idx

      • (आईडीएक्स को 1 से बढ़ाएं)

      • नोड का अधिकार:=हल करें (s, idx)

      • (आईडीएक्स को 1 से बढ़ाएं)

  • वापसी नोड

  • मुख्य विधि से निम्न कार्य करें -

  • आईडीएक्स:=0

  • अस्थायी =मान -1 के साथ नया नोड

  • रिटर्न सॉल्व (एस, आईडीएक्स)

उदाहरण (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);
   }
};
main(){
   Solution ob;
   TreeNode *root = ob.str2tree("4(2(3)(1))(6(5))");
   inord(root);
}

इनपुट

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

आउटपुट

3 2 1 4 5 6

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

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

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

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

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

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