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

C++ में दिए गए नोड के उप-वृक्ष में सभी नोड्स का XOR


इस समस्या में, हमें एक n ट्री दिया जाता है और कुछ प्रश्न हैं जो ट्री के नोड हैं। हमारा काम दिए गए नोड द्वारा बनाए गए सब-ट्री के सभी नोड्स के XOR को प्रिंट करना है।

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

C++ में दिए गए नोड के उप-वृक्ष में सभी नोड्स का XOR

प्रश्न - {1, 6, 5}

आउटपुट -

0
0
5

स्पष्टीकरण -

1^6^3^2^4^7^5
6^2^4
5

इस समस्या को हल करने के लिए, हम सब-ट्री के सभी नोड्स के xor की गणना एक बार ट्री को ट्रेस करके करेंगे और इसे स्टोर करेंगे। अब, हम सब-ट्री के सभी नोड्स के xor की गणना करेंगे यदि चाइल्ड नोड्स और फिर सभी दिए गए सब-ट्री के लिए कंप्यूटिंग। परिणामों को संग्रहीत करने से समय की बचत होती है।

उदाहरण

हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,

#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > graph;
vector<int> values, xorValues;
int computeXorValues(int i, int prev){
   int x = values[i];
   for (int j = 0; j < graph[i].size(); j++)
      if (graph[i][j] != prev) {
         x ^= computeXorValues(graph[i][j], i);
      }
      xorValues[i] = x;
      return x;
}
int solveQuerry(int u){
   return xorValues[u];
}
int main(){
   int n = 7;
   graph.resize(n);
   xorValues.resize(n);
   graph[0].push_back(1);
   graph[0].push_back(2);
   graph[1].push_back(3);
   graph[1].push_back(4);
   graph[2].push_back(5);
   graph[2].push_back(6);
   values.push_back(1);
   values.push_back(2);
   values.push_back(3);
   values.push_back(4);
   values.push_back(5);
   values.push_back(6);
   values.push_back(7);
   computeXorValues(0, -1);
   int queries[] = { 0, 2, 4, 6 };
   int q = sizeof(queries) / sizeof(queries[0]);
   for (int i = 0; i < q; i++)
      cout<<"Solution for querry "<<(i+1)<<": "<<solveQuerry(queries[i])<<endl;
   return 0;
}

आउटपुट

Solution for querry 1: 0
Solution for querry 2: 2
Solution for querry 3: 5
Solution for querry 4: 7

  1. C++ में किसी बाइनरी ट्री में किन्हीं दो नोड्स के बीच पथ का XOR

    इस समस्या में हमें एक बाइनरी ट्री और बाइनरी ट्री के दो नोड दिए जाते हैं। हमारा काम दो नोड्स के बीच के रास्ते में आने वाले सभी नोड्स के XOR को प्रिंट करना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, हमें 2 और 3 के बीच के सभी नोड्स के xor को खोजने की जरूरत है। 2 से 3 तक का रास्ता, 2 → 6 → 1 →

  1. C++ में दिए गए नोड से k दूरी पर सभी नोड्स प्रिंट करें

    इस समस्या में, हमें एक बाइनरी ट्री, एक लक्ष्य नोड और एक पूर्णांक K दिया जाता है। हमें ट्री के सभी नोड्स को प्रिंट करना होता है जो लक्ष्य नोड से K की दूरी पर होते हैं। । बाइनरी ट्री एक विशेष पेड़ है जिसके प्रत्येक नोड में अधिकतम दो नोड (एक/दो/कोई नहीं) होते हैं। आइए समस्या को समझने के लिए एक उदाहरण

  1. C++ में दिए गए परफेक्ट बाइनरी ट्री के सभी नोड्स का योग ज्ञात करें

    मान लीजिए कि हमारे पास एक सकारात्मक पूर्णांक L है, जो एक पूर्ण बाइनरी ट्री में स्तरों की संख्या का प्रतिनिधित्व करता है। इस परफेक्ट बाइनरी ट्री में लीफ नोड्स की संख्या 1 से n तक होती है। जहां n लीफ नोड्स की संख्या है। पैरेंट नोड बच्चों का योग है। हमारा काम इस परफेक्ट बाइनरी ट्री के सभी नोड्स के योग