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

सी++ में डीपेस्ट लीव्स योग


मान लीजिए कि हमारे पास एक बाइनरी ट्री है, हमें इसकी सबसे गहरी पत्तियों के मानों का योग ज्ञात करना है। तो अगर पेड़ जैसा है -

सी++ में डीपेस्ट लीव्स योग

तब आउटपुट 15 होगा।

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

  • नक्शा m, और maxDepth को परिभाषित करें
  • एक पुनरावर्ती विधि को हल करें () परिभाषित करें, यह नोड और स्तर लेगा, प्रारंभ में स्तर 0 है
  • यदि नोड मौजूद नहीं है, तो वापस आएं
  • अधिकतम गहराई :=अधिकतम स्तर और अधिकतम गहराई
  • नोड के मान से m[स्तर] बढ़ाएं
  • समाधान (नोड के बाएं, स्तर + 1)
  • समाधान (नोड का अधिकार, स्तर + 1)
  • मुख्य विधि में, अधिकतम गहराई सेट करें:=0, फिर हल करें(रूट, 0)
  • वापसी m[maxDepth]

उदाहरण(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 maxDepth;
   map <int, int> m;
   void solve(TreeNode* node, int level = 0){
      if(!node)return;
      maxDepth = max(level, maxDepth);
      m[level] += node->val;
      solve(node->left, level + 1);
      solve(node->right, level + 1);
   }
   int deepestLeavesSum(TreeNode* root) {
      maxDepth = 0;
      m.clear();
      solve(root);
      //cout << maxDepth << endl;
      return m[maxDepth];
   }
};
main(){
   vector<int> v = {1,2,3,4,5,NULL,6,7,NULL,NULL,NULL,NULL,8};
   TreeNode *root = make_tree(v);
   Solution ob;
   cout << (ob.deepestLeavesSum(root));
}

इनपुट

[1,2,3,4,5,null,6,7,null,null,null,null,8]

आउटपुट

15

  1. सी ++ में सबसे गहरे नोड्स का योग खोजने का कार्यक्रम

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें इसकी सबसे गहरी पत्तियों के मूल्यों का योग ज्ञात करना होगा। तो अगर पेड़ जैसा है - तब आउटपुट 11 होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - मानचित्र m, और maxDepth . को परिभाषित करें एक पुनरावर्ती विधि हल करें () को परिभाषित करें, यह नोड

  1. C++ में सम-मूल्यवान दादा-दादी के साथ नोड्स का योग

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है, हमें सम-मूल्यवान दादा-दादी के साथ नोड्स के मानों का योग ज्ञात करना होगा। (एक नोड का दादा-दादी अपने माता-पिता का माता-पिता है, यदि वह मौजूद है।) यदि सम-मूल्यवान दादा-दादी के साथ ऐसा कोई नोड नहीं है, तो 0 लौटाएं। इसलिए यदि पेड़ जैसा है - आउटपुट 18 होगा। लाल

  1. C++ में बाइनरी सर्च ट्री से ग्रेटर सम ट्री तक

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