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

C++ में एकल-मान वाले सबट्री की गिनती ढूंढना


मान लीजिए हमारे पास एक बाइनरी ट्री है। हमारा कार्य दिए गए ट्री में एकल-मान वाले सबट्री की गिनती करना है। एक एकल-मान वाला सबट्री एक सबट्री है, जहां उस ट्री के सभी नोड्स समान मान रखते हैं। मान लीजिए एक ट्री नीचे जैसा है -

C++ में एकल-मान वाले सबट्री की गिनती ढूंढना

चार एकल-मान वाले सबट्री हैं। ये नीचे जैसे हैं -

C++ में एकल-मान वाले सबट्री की गिनती ढूंढना

हम इसे बॉटम-अप तरीके से हल कर सकते हैं। प्रत्येक विज़िट किए गए सबट्री के लिए, सत्य लौटाएं यदि उसके तहत रूटेड सबट्री एकल-मान वाला है, और काउंटर को 1 से बढ़ाएं। यहां काउंट पुनरावर्ती कॉल के लिए रेफरेंस पैरामीटर है। और बाएं और दाएं सबट्री एकल-मान वाले हैं या नहीं, यह पता लगाने के लिए लौटाए गए मान का उपयोग करें।

उदाहरण

#include <iostream> using namespace std; class Node {    public:       int data;       Node* left, *right; }; Node* getNode(int data) {    Node* newNode = new Node;    newNode->data = data;    newNode->left = newNode->right = NULL;    return newNode; } bool countSingleValuedSubtree(Node* root, int &count) {    if (root == NULL)    return true;    bool left = countSingleValuedSubtree(root->left, count);    bool right = countSingleValuedSubtree(root->right, count);    if (left == false || right == false)       return false;    if (root->left && root->data != root->left->data)       return false;    if (root->right && root->data != root->right->data)       return false;       count++;    return true; } int countSingleValSubtree(Node* root) {    int count = 0;    countSingleValuedSubtree(root, count);    return count; } int main() {    Node* root = getNode(5);    root->left = getNode(1);    root->right = getNode(5);    root->left->left = getNode(5);    root->left->right = getNode(5);    root->right->right = getNode(5);    cout << "Count of Single Valued Subtrees is: " << countSingleValSubtree(root); }

आउटपुट

Count of Single Valued Subtrees is: 4

  1. C++ में डुप्लिकेट उपट्री ढूंढना C++ में डुप्लिकेट उपट्री ढूंढना

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें सभी डुप्लिकेट उपट्री ढूंढने हैं। इसलिए प्रत्येक प्रकार के डुप्लिकेट उपट्री के लिए, हमें उनमें से किसी एक का रूट नोड लौटाना है। मान लीजिए हमारे पास ऐसा ट्री है: डुप्लिकेट उपट्री हैं: हल का दृष्टिकोण इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:

  1. बाइनरी ट्री के दो नोड्स के बीच की दूरी खोजें C++ में बाइनरी ट्री के दो नोड्स के बीच की दूरी खोजें C++ में

    मान लीजिए हमारे पास कुछ नोड्स के साथ एक बाइनरी ट्री है। हमें दो नोड्स u और v के बीच की दूरी खोजनी है। मान लीजिए ट्री नीचे जैसा है - अब (4, 6) के बीच की दूरी = 4, पथ की लंबाई 4 है, (5, 8) के बीच की लंबाई = 5 आदि। इस समस्या को हल करने के लिए, हम LCA (निम्नतम सामान्य पूर्वज) खोजेंगे, फिर LCA से दो नोड

  1. C++ में सभी डुप्लिकेट सबट्री खोजें C++ में सभी डुप्लिकेट सबट्री खोजें

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें यह पता लगाना है कि ट्री में कुछ डुप्लिकेट सबट्री हैं या नहीं। मान लीजिए हमारे पास नीचे जैसा बाइनरी ट्री है: आकार 2 के दो समान सबट्री हैं। प्रत्येक सबट्री में D, BD और BE भी डुप्लिकेट सबट्री हैं। हम इस समस्या को ट्री सीरियलाइज़ेशन और हैशिंग प्रक्रिया का उ