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

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


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

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

आउटपुट 18 होगा। लाल नोड सम-मूल्य वाले दादा-दादी वाले नोड होते हैं, जबकि नीले नोड सम-मूल्यवान दादा-दादी होते हैं।

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

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

उदाहरण(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 res;
   map <TreeNode*, TreeNode*> parent;
   void solve(TreeNode* node, TreeNode* par = NULL){
      if(!node)return;
      if(par && parent.count(par) && parent[par] && parent[par]->val % 2 == 0){
         res += node->val;
      }
      parent[node] = par;
      solve(node->left, node);
      solve(node->right, node);
   }
   int sumEvenGrandparent(TreeNode* root) {
      res = 0;
      parent.clear();
      solve(root);
      return res;
   }
};
main(){
   vector<int> v = {6,7,8,2,7,1,3,9,NULL,1,4,NULL,NULL,NULL,5};
   TreeNode *root = make_tree(v);
   Solution ob;
   cout << (ob.sumEvenGrandparent(root));
}

इनपुट

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

आउटपुट

18

  1. C++ में सर्कुलर लिंक्ड लिस्ट के नोड्स का योग

    इस समस्या में, हमें एक वृत्ताकार लिंक्ड सूची दी गई है। हमारा काम सर्कुलर लिंक्ड लिस्ट के नोड्स के योग को खोजने के लिए एक प्रोग्राम बनाना है। हमें केवल लिंक की गई सूची के सभी नोड मानों को जोड़ने की आवश्यकता है। कुछ महत्वपूर्ण परिभाषाएं लिंक्ड लिस्ट डेटा संरचनाओं का एक क्रम है, जो लिंक के माध्य

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

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

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

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