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

C++ में बाइनरी ट्री में स्तरों का औसत


मान लीजिए कि हमारे पास एक गैर-रिक्त बाइनरी ट्री है; हमें प्रत्येक स्तर पर नोड्स के औसत मूल्य को एक सरणी के रूप में औसत मान के रूप में खोजना होगा।

तो, अगर इनपुट पसंद है

C++ में बाइनरी ट्री में स्तरों का औसत

तो आउटपुट [3, 14.5, 11] होगा।

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

  • एक सरणी परिणाम परिभाषित करें

  • एक कतार को परिभाषित करें q

  • q में रूट डालें

  • जबकि (नहीं q खाली है), करें -

    • n :=q का आकार

    • एक सरणी अस्थायी परिभाषित करें

    • जबकि n शून्य नहीं है, करें −

      • t:=q का पहला तत्व

      • तापमान में t का मान डालें

      • q से तत्व हटाएं

      • यदि t का बायां भाग शून्य नहीं है, तो -

        • t के बाएँ को q में डालें

      • यदि t का दायाँ अशक्त नहीं है, तो -

        • t के दाएँ को q में डालें

      • (n से 1 घटाएं)

    • यदि तापमान का आकार 1 के समान है, तो -

      • परिणाम के अंत में अस्थायी [0] डालें

    • अन्यथा जब अस्थायी का आकार> 1, तब −

      • योग :=0

      • प्रारंभ करने के लिए मैं:=0, जब मैं <अस्थायी का आकार, अद्यतन (मैं 1 से बढ़ाएँ), करते हैं -

        • योग:=योग + अस्थायी [i]

      • परिणाम के अंत में (अस्थायी का योग / आकार) डालें

  • वापसी परिणाम

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
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:
   vector<float> averageOfLevels(TreeNode *root){
      vector<float> result;
      queue<TreeNode*> q;
      q.push(root);
      while (!q.empty()) {
         int n = q.size();
         vector<float> temp;
         while (n) {
            TreeNode* t = q.front();
            temp.push_back(t->val);
            q.pop();
            if (t->left && t->left->val != 0)
               q.push(t->left);
            if (t->right && t->right->val != 0)
               q.push(t->right);
               n--;
         }
         if (temp.size() == 1)
            result.push_back(temp[0]);
         else if (temp.size() > 1) {
            double sum = 0;
            for (int i = 0; i < temp.size(); i++) {
               sum += temp[i];
            }
            result.push_back(sum / temp.size());
         }
      }
      return result;
   }
};
main(){
   Solution ob;
   vector<int> v = {3,9,20,NULL,NULL,15,7};
   TreeNode *root = make_tree(v);
   print_vector(ob.averageOfLevels(root));
}

इनपुट

{3,9,20,NULL,NULL,15,7}

आउटपुट

[3, 14.5, 11, ]

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

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

  1. C++ में क्रमबद्ध क्रम में बाइनरी ट्री स्तरों को प्रिंट करें

    इस समस्या में, हमें एक बाइनरी ट्री दिया जाता है और हमें सभी नोड्स को उनके मूल्यों के क्रमबद्ध क्रम में एक स्तर पर प्रिंट करना होता है। आइए अवधारणा को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं, इनपुट - आउटपुट - 20 6 15 2 17 32 78 इस समस्या को हल करने के लिए, हमें पेड़ के प्रत्येक स्तर के क्र

  1. C++ में बाइनरी ट्री टू बाइनरी सर्च ट्री रूपांतरण

    एक बाइनरी ट्री एक विशेष प्रकार का पेड़ है जिसमें पेड़ के प्रत्येक नोड में अधिकतम दो बच्चे नोड हो सकते हैं। इन चाइल्ड नोड्स को राइट चाइल्ड और लेफ्ट चाइल्ड के रूप में जाना जाता है। एक साधारण बाइनरी ट्री है - बाइनरी सर्च ट्री (BST) एक विशेष प्रकार का वृक्ष है जो निम्नलिखित नियमों का पालन करता है -