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

C++ में पेड़ों के निर्माण के बिना समान BST की जाँच करें

हमारे पास BST के तत्वों का प्रतिनिधित्व करने के लिए दो सरणियाँ हैं। यदि हम उस सरणी से बाएं से दाएं तत्व लेते हैं, और BST बनाते हैं, तो दोनों सरणियों से लेकर हम एक ही BST बनाएंगे। हमें यह जांचना होगा कि दोनों एक जैसे बन रहे हैं या नहीं। लेकिन बाधा यह है कि हम बीएसटी नहीं बना सकते। मान लीजिए कि दो सरणियाँ {2, 4, 1, 3}, और {2, 1, 4, 3} हैं, तो यदि हम देखें, तो ये दोनों क्रम समान BST बना सकते हैं।

C++ में पेड़ों के निर्माण के बिना समान BST की जाँच करें

दृष्टिकोण सरल है। जैसा कि हम जानते हैं कि लेफ्ट सबट्री के तत्व रूट से छोटे होते हैं और राइट सबट्री के एलिमेंट रूट से बड़े होते हैं। ये दो सूचियाँ समान BST का प्रतिनिधित्व कर सकती हैं यदि प्रत्येक तत्व x के लिए, x के बाएँ और दाएँ उपप्रकार के तत्व दोनों सरणियों में इसके बाद दिखाई देते हैं। बाएँ और दाएँ उपप्रकारों की जड़ों के लिए भी यही सच है। हम जांच करेंगे कि क्या अगले छोटे और बड़े तत्व दोनों सरणियों में समान हैं। इसी गुण को बाएँ और दाएँ उप-वृक्षों के लिए पुनरावर्ती रूप से जाँचा जाता है।

उदाहरण

#include <iostream>
using namespace std;
bool isSameCheckHelper(int tree1[], int tree2[], int n, int i1, int i2, int min, int max) {
   int j, k;
   for (j = i1; j < n; j++)
      if (tree1[j] > min && tree1[j] < max)
   break;
   for (k = i2; k < n; k++)
      if (tree2[k] > min && tree2[k] < max)
   break;
   if (j==n && k==n) //If the parent element is leaf in both arrays
      return true;
   if (((j==n)^(k==n)) || tree1[j]!=tree2[k])
      return false;
   return isSameCheckHelper(tree1, tree2, n, j+1, k+1, tree1[j], max) &&
   // for Right Subtree
   isSameCheckHelper(tree1, tree2, n, j+1, k+1, min, tree1[j]); // for Left Subtree
}
bool areBSTSame(int first[], int second[], int n) {
   return isSameCheckHelper(first, second, n, 0, 0, INT_MIN, INT_MAX);
}
int main() {
   int first[] = {8, 3, 6, 1, 4, 7, 10, 14, 13};
   int second[] = {8, 10, 14, 3, 6, 4, 1, 7, 13};
   int n=sizeof(first)/sizeof(first[0]);
   if(areBSTSame(first, second, n)) {
      cout << "Two BSTs are same";
   } else {
      cout << "Two BSTs are not same";
   }
}

आउटपुट

Two BSTs are same

  1. C++ . में भूलभुलैया III

    मान लीजिए कि खाली जगह और दीवारों के साथ एक भूलभुलैया है और उस भूलभुलैया में एक गेंद भी है। गेंद ऊपर (यू), नीचे (डी), बाएं (एल) या दाएं (आर) दिशाओं को लुढ़क कर खाली जगहों से जा सकती है, लेकिन यह दीवार से टकराने तक लुढ़कती रहती है। जब गेंद रुकती है, तो वह अगली दिशा चुन सकती है। उस भूलभुलैया में एक छेद

  1. C++ में पेड़ों के निर्माण के बिना समान BST की जाँच करें

    हमारे पास BST के तत्वों का प्रतिनिधित्व करने के लिए दो सरणियाँ हैं। यदि हम उस सरणी से बाएं से दाएं तत्व लेते हैं, और BST बनाते हैं, तो दोनों सरणियों से लेकर हम एक ही BST बनाएंगे। हमें यह जांचना होगा कि दोनों एक जैसे बन रहे हैं या नहीं। लेकिन बाधा यह है कि हम बीएसटी नहीं बना सकते। मान लीजिए कि दो सरण

  1. विंडो पर c++ के लिए शीर्ष IDE क्या है?

    केवल टेक्स्ट एडिटर्स पर बड़े प्रोजेक्ट्स को मैनेज करना मुश्किल है। यदि आप ऐसे मामलों में आईडीई का उपयोग करते हैं तो आप अधिक उत्पादक और कम निराश होने की संभावना रखते हैं। विभिन्न प्रकार के आईडीई हैं और आपको अपनी आवश्यकताओं के अनुरूप सही का चयन करना चाहिए। यहां विंडो के लिए सर्वश्रेष्ठ C/C++ IDE की सू