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

C++ में एक बाइनरी ट्री का अधिकतम स्तर योग


मान लीजिए कि हमारे पास एक बाइनरी ट्री की जड़ है, इसकी जड़ का स्तर 1 है, इसके बच्चों का स्तर 2 है, इत्यादि। हमें सबसे छोटे स्तर X को वापस करना होगा जैसे कि X स्तर पर नोड्स के सभी मानों का योग अधिकतम हो। तो अगर पेड़ जैसा है -

C++ में एक बाइनरी ट्री का अधिकतम स्तर योग

तब आउटपुट 2 होगा, स्तर 1 योग =1, स्तर 2 योग 7 + 0 =7 है, स्तर 2 योग 7 + (-8) =-1 है, इसलिए अधिकतम स्तर का है 2, इसलिए आउटपुट 2 है।

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

  • स्तर:=1, योग:=r का मान, उत्तरस्तर:=स्तर, उत्तरसम:=योग
  • एक कतार q परिभाषित करें, दिए गए नोड r को q में डालें
  • जबकि q खाली नहीं है
    • क्षमता:=q का आकार
    • स्तर को 1 से बढ़ाएं, योग :=0
    • जबकि क्षमता 0 नहीं है
      • नोड:=q से फ्रंट नोड, q से नोड हटाएं
      • यदि नोड का अधिकार मान्य है, तो योग:=योग + दाएं नोड का मान, q में दायां नोड डालें
      • यदि नोड का बायां नोड मान्य है, तो योग:=योग + बाएं नोड का मान, बाएं नोड को q में डालें
      • क्षमता में 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 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:
   int maxLevelSum(TreeNode* r) {
      int level = 1, sum = r->val;
      int ansLevel = level, ansSum = sum;
      queue <TreeNode*> q;
      q.push(r);
      while(!q.empty()){
         int capacity = q.size();
         level++;
         sum = 0;
         while(capacity--){
            TreeNode* node = q.front();
            q.pop();
            if(node->right){
               sum += node->right->val;
               q.push(node->right);
            }
            if(node->left){
               sum += node->left->val;
               q.push(node->left);
            }
         }
         if(ansSum<sum){
            ansSum = sum;
            ansLevel = level;
         }
      }
      return ansLevel;
   }
};
main(){
   vector<int> v = {1,7,0,7,-8,NULL,NULL};
   TreeNode *root = make_tree(v);
   Solution ob;
   cout <<ob.maxLevelSum(root);
}

इनपुट

[1,7,0,7,-8,null,null]

आउटपुट

2

  1. C++ में बाइनरी ट्री में अधिकतम लम्बवत योग ज्ञात कीजिए

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। कार्य ऊर्ध्वाधर क्रम ट्रैवर्सल में सभी नोड्स के अधिकतम योग को प्रिंट करना है। तो अगर पेड़ नीचे जैसा है - लंबवत क्रम ट्रैवर्सल इस प्रकार है - 4 2 1 + 5 + 6 = 12 3 + 8 = 11 7 9 यहां अधिकतम 12 है। दृष्टिकोण सरल है। हम वर्टिकल ऑर्डर ट्रैवर्सल करेंगे, फिर योग

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

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

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

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