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

C++ में सबसे गहरी पत्तियों का योग


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

C++ में सबसे गहरी पत्तियों का योग

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

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

  • एक मैप m और maxDepth परिभाषित करें
  • एक रिकर्सिव मेथड solve() परिभाषित करें, जो नोड और लेवल लेगा, प्रारंभ में लेवल 0 है
  • यदि नोड मौजूद नहीं है, तो लौटें
  • maxDepth := लेवल और maxDepth का मैक्स
  • m[लेवल] को नोड के मान से बढ़ाएं
  • solve(नोड का लेफ्ट, लेवल + 1)
  • solve(नोड का राइट, लेवल + 1)
  • मेन मेथड में, maxDepth := 0 सेटअप करें, फिर solve(root, 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. सबसे गहरे नोड्स के योग का प्रोग्राम C++ में सबसे गहरे नोड्स के योग का प्रोग्राम C++ में

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें इसके सबसे गहरे पत्तों के मानों का योग ढूंढना है। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक मैप m और maxDepth परिभाषित करें एक रिकर्सिव विधि solve() परिभाषित करें, यह नोड और लेवल लेगी, प्रारंभ में लेवल 0 है यदि नोड मौजूद नहीं है, तो लौटें maxDept

  1. C++ में सम-वैल्यू वाले ग्रैंडपेरेंट वाले नोड्स का योग C++ में सम-वैल्यू वाले ग्रैंडपेरेंट वाले नोड्स का योग

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

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

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