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

पेड़ के स्तर को खोजने के लिए कार्यक्रम जिसमें सी ++ में न्यूनतम योग है

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

पेड़ के स्तर को खोजने के लिए कार्यक्रम जिसमें सी ++ में न्यूनतम योग है

आउटपुट 2 होगा क्योंकि योग 4 - 10 =-6 है, जो न्यूनतम है।

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

  • स्तर:=1, योग:=आर का मूल्य, उत्तर स्तर:=स्तर, उत्तर योग:=योग

  • एक कतार q परिभाषित करें, दिए गए नोड r को q में डालें

  • जबकि q खाली नहीं है

    • क्षमता :=q का आकार

    • स्तर 1 से बढ़ाएँ, योग :=0

    • जबकि क्षमता 0 नहीं है

      • नोड:=q से सामने वाला नोड, q से नोड हटाएं

      • यदि नोड का अधिकार मान्य है, तो योग:=योग + दाएँ नोड का मान, दाएँ सम्मिलित करें

      • क्यू में नोड
      • यदि नोड का बायां नोड मान्य है, तो योग:=योग + बाएं नोड का मान, बाएं नोड को q में डालें

      • क्षमता में 1

        . की कमी करें
    • अगर ansSum <योग, तो ansSum:=sum, ansLevel:=level

  • उत्तर स्तर पर लौटें

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

उदाहरण

#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:
   int solve(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(){
   TreeNode *root = new TreeNode(5);
   root->left = new TreeNode(4);
   root->right = new TreeNode(-10);
   root->left->right = new TreeNode(-2);
   root->right->left = new TreeNode(-7);
   root->right->right = new TreeNode(15);
   Solution ob;
   cout <<ob.solve(root);
}

इनपुट

TreeNode *root = new TreeNode(5);
root->left = new TreeNode(4);
root->right = new TreeNode(-10);
root->left->right = new TreeNode(-2);
root->right->left = new TreeNode(-7);
root->right->right = new TreeNode(15);

आउटपुट

2

  1. C++ में बाइनरी ट्री में अधिकतम (या न्यूनतम) खोजें

    इस समस्या में हमें एक बाइनरी ट्री दिया जाता है। हमारा काम बाइनरी ट्री में अधिकतम (या न्यूनतम) खोजना है। समस्या का विवरण: हमें बाइनरी ट्री के उन नोड्स को खोजने की आवश्यकता है जिनका बाइनरी ट्री में अधिकतम और न्यूनतम मान है। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट: आउटपुट: अधिकतम

  1. सी ++ में एक पेड़ में सबसे बड़ा सबट्री योग खोजें

    इस समस्या में हमें एक बाइनरी ट्री दिया जाता है। हमारा काम पेड़ में सबसे बड़ा सबट्री योग खोजना है। समस्या का विवरण: बाइनरी ट्री में सकारात्मक और साथ ही नकारात्मक मान होते हैं। और हमें उस सबट्री को खोजने की जरूरत है जिसमें नोड्स की अधिकतम राशि हो। समस्या को समझने के लिए एक उदाहरण लेते हैं,

  1. C++ में बाइनरी ट्री के दाहिने पत्तों का योग ज्ञात करने का कार्यक्रम

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है, तो हमें दिए गए बाइनरी ट्री में सभी दाएँ पत्तों का योग ज्ञात करना है। तो, अगर इनपुट पसंद है तब आउटपुट 17 होगा, क्योंकि बाइनरी ट्री में दो दाहिने पत्ते हैं, जिनका मान क्रमशः 7 और 10 है। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - फ़ंक्शन dfs() को