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