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

सी++ में दो योग बीएसटी


मान लीजिए कि हमारे पास दो बाइनरी सर्च ट्री हैं, हमें ट्रू वापस करना होगा यदि पहले ट्री में एक नोड और दूसरे ट्री में एक नोड है और इन नोड्स का योग एक पूर्णांक लक्ष्य है . तो अगर पेड़ जैसा है -

सी++ में दो योग बीएसटी

और लक्ष्य 5 है, तो परिणाम सत्य है।

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

  • मानचित्र को परिभाषित करें
  • चेक () नामक एक विधि को परिभाषित करें, यह नोड, लक्ष्य और नोडनंबर लेगा, यह निम्नानुसार काम करेगा -
  • यदि नोड मान्य है, तो झूठी वापसी करें
  • curr :=नोड का मान, req :=target – curr
  • यदि s में req मौजूद है और s[req] nodeNumber नहीं है, तो true वापस करें
  • s[curr] :=nodeNumber
  • रिटर्न चेक (नोड, टारगेट, नोड नंबर के बाएं) या चेक (नोड, टारगेट, नोडनंबर के दाएं)
  • मुख्य विधि में, हम सेट करेंगे -
  • झंडा :=चेक (रूट1, लक्ष्य, 1)
  • रिटर्न चेक(रूट2, लक्ष्य, 2)

उदाहरण(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:
   map <int,int> s;
   bool check(TreeNode* node, int target,int nodeNumber){
      if(!node)return false;
      int curr = node->val;
      int req = target - curr;
      if(s.find(req)!=s.end() && s[req]!=nodeNumber)return true;
      s[curr]=nodeNumber;
      return check(node->left,target,nodeNumber) || check(node->right,target,nodeNumber);
   }
   bool twoSumBSTs(TreeNode* root1, TreeNode* root2, int target) {
      bool flag = check(root1,target,1);
      return check(root2,target,2);
   }
};
main(){
   vector<int> v1 = {2,1,4};
   vector<int> v2 = {1,0,3};
   TreeNode *r1 = make_tree(v1);
   TreeNode *r2 = make_tree(v2);
   Solution ob;
   cout <<ob.twoSumBSTs(r1, r2, 5);
}

इनपुट

[2,1,4]
[1,0,3]
5

आउटपुट

1

  1. जावास्क्रिप्ट में बीएसटी में दो योग

    समस्या: हमें एक जावास्क्रिप्ट फ़ंक्शन लिखने की आवश्यकता है जो दो बाइनरी सर्च ट्री, रूट 1 और रूट 2 की जड़ों को क्रमशः पहले और दूसरे तर्क के रूप में लेता है। फ़ंक्शन का तीसरा तर्क संख्या, लक्ष्य है। हमारे फ़ंक्शन को ट्रू वापस करना चाहिए अगर और केवल तभी जब पहले पेड़ में एक नोड और दूसरे पेड़ में एक नो

  1. दो बीएसटी से जोड़े की गणना करें जिनकी राशि सी ++ में दिए गए मान x के बराबर है

    हमें इनपुट के रूप में दो बाइनरी सर्च ट्री और एक वेरिएबल x दिया गया है। लक्ष्य प्रत्येक पेड़ से नोड्स के जोड़े को ढूंढना है ताकि नोड्स के मूल्य का योग x के बराबर हो। BST_1 से नोड 1 और BST_2 से नोड 2 लें और दोनों का डेटा भाग जोड़ें। यदि योग =x. वेतन वृद्धि की संख्या। आइए उदाहरणों से समझते हैं। इनपुट

  1. दो योग IV - इनपुट C++ में एक BST है

    मान लीजिए हमारे पास एक बाइनरी सर्च ट्री और एक लक्ष्य मान है; हमें यह जांचना होगा कि क्या बीएसटी में दो तत्व मौजूद हैं जैसे कि उनका योग दिए गए लक्ष्य के बराबर है या नहीं। तो, अगर इनपुट पसंद है तो आउटपुट ट्रू होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - सरणी को परिभाषित करें v एक