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

सी++ में पथ योग III

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

अगर पेड़ [5,4,8,11,null,13,4,7,2,null,null,5,1] जैसा है, और योग 22 है, तो यह होगा -

सी++ में पथ योग III

पथ हैं [[5,4,11,2],[5,8,4,5]]।

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

  • इस समस्या को हल करने के लिए dfs फ़ंक्शन का उपयोग करें, dfs को थोड़ा संशोधित किया गया है, यह निम्नानुसार काम करेगा। यह फ़ंक्शन रूट, योग और एक अस्थायी सरणी लेगा
  • यदि रूट मौजूद नहीं है, तो वापस आएं
  • यदि रूट का बायां और रूट का दायां खाली है, तो
    • यदि योग =मूल का मान, तो
      • अस्थायी में रूट का मान डालें, परिणाम में अस्थायी डालें, और अस्थायी से अंतिम नोड हटाएं
    • वापसी
  • अस्थायी में रूट का मान डालें
  • dfs (रूट के बाईं ओर, योग - रूट का मान, अस्थायी)
  • dfs (रूट का दायां, योग - रूट का मान, अस्थायी)
  • अस्थायी से अंतिम तत्व हटाएं

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<int> > v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << "[";
      for(int j = 0; j <v[i].size(); j++){
         cout << v[i][j] << ", ";
      }
      cout << "],";
   }
   cout << "]"<<endl;
}
class TreeNode{
   public:
      int val;
      TreeNode *left, *right;
      TreeNode(int data){
         val = data;
         left = 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:
   vector < vector <int> > res;
   void dfs(TreeNode* root, int sum, vector <int>& temp){
      if(!root)return;
      if(!root->left && !root->right){
         if(sum == root->val){
            temp.push_back(root->val);
            res.push_back(temp);
            temp.pop_back();
         }
         return;
      }
      temp.push_back(root->val);
      dfs(root->left, sum - root->val, temp);
      dfs(root->right, sum - root->val, temp);
      temp.pop_back();
   }
   vector<vector<int>> pathSum(TreeNode* root, int sum) {
      res.clear();
      vector <int> temp;
      dfs(root, sum, temp);
      return res;
   }
};
main(){
   Solution ob;
   vector<int> v = {5,4,8,11,NULL,13,4,7,2,NULL,NULL,NULL,NULL,5,1};
   TreeNode *root = make_tree(v);
   print_vector(ob.pathSum(root, 22));
}

इनपुट

[5,4,8,11,null,13,4,7,2,null,null,5,1]
22

आउटपुट

[[5, 4, 11, 2, ],[5, 8, 4, 5, ],]

  1. पता लगाएं कि रूट में एक जोड़ी पथ के साथ सी ++ में रूट के डेटा के बराबर योग है या नहीं

    इस समस्या में हमें एक Binary Tree दिया जाता है। और हमें यह पता लगाने की जरूरत है कि क्या रूट के डेटा के बराबर योग के साथ लीफ पाथ में रूट में कोई जोड़ा है। हमें यह जांचने की आवश्यकता है कि क्या नोड्स की एक जोड़ी मौजूद है जो रूट नोड से लीफ नोड्स के बीच स्थित है, ताकि जोड़े के मानों का योग रूट नोड क

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

    इस समस्या में, हमें एक बाइनरी ट्री दिया जाता है जिसमें प्रत्येक नोड में एक मान होता है। हमारा काम एक बाइनरी ट्री की दो पत्तियों के बीच अधिकतम पथ योग खोजने के लिए एक प्रोग्राम बनाना है। यहां, हमें एक लीफ नोड से दूसरे लीफ नोड के लिए पथ फॉर्म ढूंढना होगा जो अधिकतम मूल्यों को प्रदान करेगा। इस अधिकतम यो

  1. पायथन में पथ योग

    मान लीजिए कि हमारे पास एक पेड़ और एक योग है। हमें एक रास्ता ऐसा खोजना होगा कि अगर हम उस रास्ते पर चलेंगे तो हमें वह योग मिलेगा जो दिए गए योग से मेल खाएगा। मान लीजिए पेड़ [0,-3,9,-10, null,5] जैसा है और योग 14 है, तो एक पथ है 0 → 9 → 5 इसे हल करने के लिए, हम इन चरणों का पालन करेंगे। यदि जड़ शून