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

C++ में एक बाइनरी ट्री की पूर्णता की जाँच करें

मान लीजिए कि हमारे पास एक बाइनरी ट्री है। हमें यह जांचना है कि ट्री पूर्ण बाइनरी ट्री है या नहीं। स्तर n के एक पूर्ण बाइनरी ट्री में n-1 पूर्ण स्तर होते हैं, और स्तर n पर सभी नोड्स बाईं ओर से भरे जाते हैं। तो अगर इनपुट ट्री जैसा है -

C++ में एक बाइनरी ट्री की पूर्णता की जाँच करें


तब आउटपुट सही होगा, क्योंकि यह पूर्ण बाइनरी ट्री है।

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

  • अगर पेड़ खाली है, तो अशक्त लौटें

  • एक कतार q बनाएं और उसमें रूट डालें

  • ध्वज सेट करें:=सत्य

  • जबकि q में कुछ तत्व होते हैं

    • sz :=कतार का आकार

    • जबकि sz 0 नहीं है

      • नोड:=कतार से हटाने के बाद नोड

      • अगर नोड ने सबट्री छोड़ दिया है, तो

        • यदि ध्वज सेट किया गया है, तो नोड के बाएं उपट्री को q में डालें, अन्य रिटर्न गलत है

      • अन्यथा झंडा :=झूठा

      • अगर नोड में सही सबट्री है, तो

        • यदि ध्वज सेट है, तो q में नोड का दायां उपप्रकार डालें, अन्यथा झूठी वापसी करें

      • झंडा :=झूठा

      • sz :=sz – 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;
   }
};
void insert(TreeNode **root, int val){
   queue<TreeNode*> q;
   q.push(*root);
   while(q.size()){
      TreeNode *temp = q.front();
      q.pop();
      if(!temp->left){
         if(val != NULL)
            temp->left = new TreeNode(val);
         else
            temp->left = new TreeNode(0);
         return;
      }else{
         q.push(temp->left);
      }
      if(!temp->right){
         if(val != NULL)
            temp->right = new TreeNode(val);
         else
            temp->right = new TreeNode(0);
         return;
      }else{
         q.push(temp->right);
      }
   }
}
TreeNode *make_tree(vector<int> v){
   TreeNode *root = new TreeNode(v[0]);
   for(int i = 1; i<v.size(); i++){
      insert(&root, v[i]);
   }
   return root;
}
class Solution {
   public:
   bool isCompleteTree(TreeNode* root) {
      if(!root)return true;
      queue <TreeNode*> q;
      q.push(root);
      bool isComplete = true;
      while(!q.empty()){
         int sz = q.size();
         while(sz--){
            TreeNode* node = q.front();
            q.pop();
            if(node->left){
               if(isComplete){
                  q.push(node->left);
               }else return false;
            }else{
               isComplete = false;
            }
            if(node->right){
               if(isComplete){
                  q.push(node->right);
               }else return false;
            }else{
               isComplete = false;
            }
         }  
      }
      return true;
   }
};
main(){
   vector<int> v = {1,2,3,4,5,6};
   TreeNode *r1 = make_tree(v);
   Solution ob;
   cout << (ob.isCompleteTree(r1));
}

इनपुट

{1,2,3,4,5,6}

आउटपुट

1

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

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

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

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

  1. जांचें कि बाइनरी ट्री को सी ++ में स्तर-वार क्रमबद्ध किया गया है या नहीं

    यहां हम देखेंगे कि बाइनरी ट्री की जांच कैसे की जाती है कि यह स्तर के अनुसार क्रमबद्ध है या नहीं। स्तर के अनुसार क्रमबद्ध बाइनरी ट्री नीचे जैसा दिखेगा - प्रत्येक स्तर में, नोड्स को बाएं से दाएं क्रमबद्ध किया जाता है, और प्रत्येक परत में अपने पिछले स्तर की तुलना में उच्च मान होता है। हम लेवल ऑर्डर