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

C++ में बाइनरी ट्री में दिए गए नोड का मिरर ढूंढना


इस समस्या में, हमें एक बाइनरी ट्री दिया जाता है। हमारा कार्य बाइनरी ट्री में दिए गए नोड का मिरर ढूंढना है। हमें एक नोड दिया जाएगा, और उस नोड का मिरर इमेज विपरीत सबट्री में ढूंढना होगा।

आइए एक उदाहरण से समस्या को समझते हैं,

इनपुट

C++ में बाइनरी ट्री में दिए गए नोड का मिरर ढूंढना

आउटपुट

mirror of B is E.

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

समस्या को हल करने का एक सरल समाधान रूट से दो पॉइंटर्स का उपयोग करके पुनरावृत्ति करना है - बाएं सबट्री और दाएं सबट्री के लिए। फिर लक्ष्य मान के लिए यदि कोई मिरर मिलता है तो मिरर वापस करें अन्यथा अन्य नोड्स के लिए पुनरावृत्ति करें।

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

उदाहरण

#include <bits/stdc++.h> using namespace std; struct Node {    int key;    struct Node* left, *right; }; struct Node* newNode(int key){    struct Node* n = (struct Node*) malloc(sizeof(struct Node*));    if (n != NULL){       n->key = key;       n->left = NULL;       n->right = NULL;       return n;    }    else{       cout << "Memory allocation failed!"       << endl;       exit(1);    } } int mirrorNodeRecur(int node, struct Node* left, struct Node* right){    if (left == NULL || right == NULL)       return 0;    if (left->key == node)       return right->key;    if (right->key == node)       return left->key;       int mirrorNode = mirrorNodeRecur(node, left->left, right->right);    if (mirrorNode)       return mirrorNode;    mirrorNodeRecur(node, left->right, right->left); } int findMirrorNodeBT(struct Node* root, int node) {    if (root == NULL)       return 0;    if (root->key == node)       return node;    return mirrorNodeRecur(node, root->left, root->right); } int main() {    struct Node* root = newNode(1);    root-> left = newNode(2);    root->left->left = newNode(3);    root->left->left->left = newNode(4);    root->left->left->right = newNode(5);    root->right = newNode(6);    root->right->left = newNode(7);    root->right->right = newNode(8);    int node = root->left->key;    int mirrorNode = findMirrorNodeBT(root, node);    cout<<"The node is root->left, value : "<<node<<endl;    if (mirrorNode)       cout<<"The Mirror of Node "<<node<<" in the binary tree is       Node "<<mirrorNode;    else       cout<<"The Mirror of Node "<<node<<" in the binary tree is    not present!";    node = root->left->left->right->key;    mirrorNode = findMirrorNodeBT(root, node);    cout<<"\n\nThe node is root->left->left->right, value :    "<<node<<endl;    if (mirrorNode)       cout<<"The Mirror of Node "<<node<<" in the binary tree is    Node "<<mirrorNode;    else       cout<<"The Mirror of Node "<<node<<" in the binary tree is    not present!"; }

आउटपुट

The node is root->left, value : 2 The Mirror of Node 2 in the binary tree is Node 6 The node is root->left->left->right, value : 5 The Mirror of Node 5 in the binary tree is not present!

  1. C++ में उस ट्री के क्लोन में बाइनरी ट्री के कॉरेस्पॉन्डिंग नोड को ढूंढना C++ में उस ट्री के क्लोन में बाइनरी ट्री के कॉरेस्पॉन्डिंग नोड को ढूंढना

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

  1. C++ में बाइनरी ट्री में निकटतम लीफ ढूंढें C++ में बाइनरी ट्री में निकटतम लीफ ढूंढें

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

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

    मान लीजिए हमारे पास कुछ नोड्स के साथ एक बाइनरी ट्री है। हमें रूट और दूसरे नोड u के बीच की दूरी खोजनी है। मान लीजिए ट्री नीचे जैसा है: अब (रूट, 6) के बीच की दूरी = 2, पथ की लंबाई 2 है, (रूट, 8) के बीच की दूरी = 3 आदि। इस समस्या को हल करने के लिए, हम नोड को बाएं और दाएं सबट्री में खोजने के लिए एक पुन