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

जांचें कि क्या एक स्ट्रिंग सी ++ में एक बाइनरी ट्री में रूट से लीव्स पाथ तक एक वैध अनुक्रम है

मान लीजिए कि हमारे पास एक बाइनरी ट्री है जहां रूट से किसी भी पत्ते तक जाने वाला प्रत्येक पथ एक वैध अनुक्रम बनाता है, हमें यह जांचना होगा कि दिए गए स्ट्रिंग ऐसे बाइनरी ट्री में एक वैध अनुक्रम है या नहीं।

हम दिए गए स्ट्रिंग को पूर्णांकों की एक सरणी के संयोजन से प्राप्त करेंगे और एक पथ के साथ नोड्स के सभी मानों के संयोजन से अनुक्रम में परिणाम प्राप्त होंगे

मान लीजिए हमारे पास एक बाइनरी ट्री जैसा है।

जांचें कि क्या एक स्ट्रिंग सी ++ में एक बाइनरी ट्री में रूट से लीव्स पाथ तक एक वैध अनुक्रम है

इसलिए, यदि arr =[0,1,0,1] है, तो आउटपुट सही होगा, क्योंकि पथ 0 -> 1 -> 0 -> 1 एक वैध अनुक्रम (हरा रंग) है। अन्य मान्य क्रम होंगे:0 -> 1 -> 1 -> 0, 0 -> 0 -> 0

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

  • एक फ़ंक्शन हल करें () को परिभाषित करें, यह नोड लेगा, एक सरणी v, idx इसे 0 से प्रारंभ करें,

  • यदि नोड शून्य है, तो -

    • झूठी वापसी

  • अगर idx>=v का आकार, तो −

    • झूठी वापसी

  • यदि नोड का मान v[idx] के बराबर नहीं है, तो -

    • झूठी वापसी

  • यदि नोड की कोई संतान नहीं है, तो -

    • सही लौटें जब idx ==v का आकार

  • रिटर्न सॉल्व (नोड के बाएँ, v, idx + 1)

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

  • वापसी हल (रूट, गिरफ्तारी)

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;
class TreeNode{
public:
   int val;
   TreeNode *left, *right;
   TreeNode(int data){
      val = data;
      left = NULL;
      right = NULL;
   }
};
class Solution {
public:
   bool solve(TreeNode* node, vector <int>& v, int idx = 0){
      if(!node) return false;
      if(idx >= v.size()) return false;
      if(node->val != v[idx]) return false;
      if(!node->left && !node->right){
         return idx == v.size() - 1;
      }
      return solve(node->left, v, idx + 1) || solve(node->right, v, idx + 1);
   }
   bool isValidSequence(TreeNode* root, vector<int>& arr) {
      return solve(root, arr);
   }
};
main(){
   TreeNode *root = new TreeNode(0);
   root->left = new TreeNode(1); root->right = new TreeNode(0);
   root->left->left = new TreeNode(0); root->left->right = new
   TreeNode(1);
   root->right->left = new TreeNode(0);
   root->left->left->right = new TreeNode(1);
   root->left->right->left = new TreeNode(0); root->left->right->right = new TreeNode(0);
   Solution ob;
   vector<int> v = {0,1,0,1};
   cout << (ob.isValidSequence(root, v));
}

इनपुट

TreeNode *root = new TreeNode(0);
root->left = new TreeNode(1); root->right = new TreeNode(0);
root->left->left = new TreeNode(0); root->left->right = new
TreeNode(1);
root->right->left = new TreeNode(0);
root->left->left->right = new TreeNode(1);
root->left->right->left = new TreeNode(0); root->left->right->right = new TreeNode(0);

आउटपुट

1

  1. C++ में एक बाइनरी ट्री में रूट से दिए गए नोड की दूरी ज्ञात करें

    मान लें कि हमारे पास कुछ नोड्स के साथ एक बाइनरी ट्री है। हमें रूट और दूसरे नोड u के बीच की दूरी का पता लगाना है। मान लीजिए पेड़ नीचे जैसा है: अब बीच की दूरी (रूट, 6) =2, पथ की लंबाई 2, के बीच की दूरी (रूट, 8) =3 आदि। इस समस्या को हल करने के लिए, हम बाएँ और दाएँ सबट्री में नोड को खोजने के लिए एक

  1. जाँच करें कि क्या दिया गया बाइनरी ट्री C++ में SumTree है

    यहां हम देखेंगे कि कैसे जांचा जाए कि बाइनरी ट्री सम-ट्री है या नहीं। अब प्रश्न यह है कि योग वृक्ष क्या है। सम-ट्री एक बाइनरी ट्री है जहाँ एक नोड अपने बच्चों का योग मान रखेगा। पेड़ की जड़ में उसके नीचे के सभी तत्वों का योग होगा। यह सम-वृक्ष का उदाहरण है - इसे चेक करने के लिए हम एक आसान सी ट्रिक अप

  1. जाँच करें कि क्या एक बाइनरी ट्री C++ में किसी अन्य बाइनरी ट्री का सबट्री है

    मान लीजिए कि हमारे पास दो बाइनरी ट्री हैं। हमें यह जांचना होगा कि छोटा पेड़ दूसरे बाइनरी ट्री का सबट्री है या नहीं। गौर कीजिए कि ये दो पेड़ दिए गए हैं। दो पेड़ हैं। दूसरा वृक्ष पहले वाले का उपवृक्ष है। इस संपत्ति की जांच करने के लिए, हम पेड़ को पोस्ट-ऑर्डर फैशन में पार करेंगे, फिर यदि इस नोड के स