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

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

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

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

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट:

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

आउटपुट: हाँ

स्पष्टीकरण:

रूट नोड मान 7

रूट नोड, (2, 5), (1, 6) के बराबर योग मान वाले जोड़े।

समाधान दृष्टिकोण:

हमें पेड़ को पार करने और हैशिंग का उपयोग करके जोड़े खोजने की जरूरत है।

इसके लिए हम एक हैशटेबल और ट्रैवर्स ट्री बनाएंगे। हैशटेबल में डेटा डालें और फिर जांचें कि अन्य तत्वों के साथ इसका योग रूट के बराबर है या नहीं।

और अंत में, अगर हमें कोई जोड़ा नहीं मिलता है, तो झूठा लौटाएं।

यदि जोड़े पाए जाते हैं, तो सत्य लौटाएं।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

उदाहरण

#include<bits/stdc++.h>
using namespace std;

struct Node {
   
   int data;
   struct Node* left, *right;
};

struct Node* newnode(int data) {
   
   struct Node* node = new Node;
   node->data = data;
   node->left = node->right = NULL;
   return (node);
}

bool findSumUntill(Node *node, unordered_set<int> &amp;hashTable, int rootVal)
{
   if (node == NULL)
      return false;

   int otherVal = rootVal - node->data;
   if (hashTable.find(otherVal) != hashTable.end())
      return true;

   hashTable.insert(node->data);
   bool isFound = findSumUntill(node->left, hashTable, rootVal) || findSumUntill(node->right, hashTable, rootVal);
   hashTable.erase(node->data);

   return isFound;
}

bool findPairSum(Node *root) {
   
   unordered_set<int> hashTable;

   return findSumUntill(root->left, hashTable, root->data) || findSumUntill(root->right, hashTable, root->data);
}

int main()
{
   struct Node *root = newnode(7);
   root->left = newnode(2);
   root->right = newnode(3);
   root->left->left = newnode(5);
   root->left->right = newnode(9);
   root->left->left->left = newnode(1);
   root->left->left->right = newnode(6);
   root->right->left = newnode(8);
   
   if(findPairSum(root))
      cout<<"Pair with sum equal to root value found";
   else
      cout<<"No pairs found";
   return 0;
}

आउटपुट

Pair with sum equal to root value found

  1. C++ में संतुलित BST में दिए गए योग के साथ एक युग्म खोजें

    मान लीजिए कि हमारे पास एक संतुलित बाइनरी सर्च ट्री और एक लक्ष्य योग है, हमें एक ऐसी विधि को परिभाषित करना होगा जो यह जांचती है कि यह योग के साथ एक जोड़ी लक्ष्य योग के बराबर है या नहीं। इस मामले में। हमें यह ध्यान रखना होगा कि बाइनरी सर्च ट्री अपरिवर्तनीय है। तो, अगर इनपुट पसंद है तो आउटपुट होगा

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

    मान लीजिए कि हमने एक बाइनरी ट्री दिया है जिसमें प्रत्येक नोड में एक पूर्णांक कुंजी होती है। हमें उन पथों को खोजना है जो किसी दिए गए मान के योग हैं। रास्ता जड़ से पत्ती तक शुरू होना चाहिए। हमें वह रास्ता खोजना होगा जहां योग समान हो। अगर पेड़ [5,4,8,11,null,13,4,7,2,null,null,5,1] जैसा है, और योग 22

  1. सी ++ में सापेक्ष स्थिति के साथ सभी रूट को पत्ती पथ पर प्रिंट करें

    इस समस्या में हमें एक बाइनरी ट्री दिया जाता है। और हमें जड़ से लेकर पेड़ के पत्ते तक के सभी रास्तों को प्रिंट करना होता है। साथ ही, नोड्स की सापेक्ष स्थिति दिखाने के लिए अंडरस्कोर “_” जोड़ें। आइए विषय को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं - इनपुट - आउटपुट - _ _ 3 _ 9 1 _3 9 _7 3 _ 4