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

C++ में पैरेंट पॉइंटर्स के साथ बाइनरी ट्री में दायां सहोदर खोजें


इस समस्या में हमें एक बाइनरी ट्री और पैरेंट पॉइंटर्स दिए गए हैं। हमारा कार्य पैरेंट पॉइंटर्स के साथ बाइनरी ट्री में दायां सहोदर खोजना है।

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

इनपुट

C++ में पैरेंट पॉइंटर्स के साथ बाइनरी ट्री में दायां सहोदर खोजें

Node = 3

आउटपुट

7

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

इस समस्या का एक सरल समाधान निकटतम पूर्वज (जो न तो वर्तमान नोड है और न ही वर्तमान नोड का पैरेंट) का लीफ नोड ढूंढना है जो वर्तमान नोड के समान स्तर पर है। यह स्तरों को गिनते हुए ऊपर जाकर और फिर नीचे आते हुए उन्हें गिनकर किया जाता है। और फिर नोड ढूंढना।

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

उदाहरण

#include <bits/stdc++.h> using namespace std; struct Node {    int data;    Node *left, *right, *parent; }; Node* newNode(int item, Node* parent) {    Node* temp = new Node;    temp->data = item;    temp->left = temp->right = NULL;    temp->parent = parent;    return temp; } Node* findRightSiblingNodeBT(Node* node, int level) {    if (node == NULL || node->parent == NULL)       return NULL;    while (node->parent->right == node ||       (node->parent->right == NULL && node->parent->left == node)) {          if (node->parent == NULL || node->parent->parent == NULL)             return NULL;       node = node->parent;       level++;    }    node = node->parent->right;    if (node == NULL)       return NULL;    while (level > 0) {       if (node->left != NULL)          node = node->left;       else if (node->right != NULL)          node = node->right;       else          break;       level--;    }    if (level == 0)       return node;    return findRightSiblingNodeBT(node, level); } int main(){    Node* root = newNode(4, NULL);    root->left = newNode(2, root);    root->right = newNode(5, root);    root->left->left = newNode(1, root->left);    root->left->left->left = newNode(9, root->left->left);    root->left->left->left->left = newNode(3, root->left->left->left);    root->right->right = newNode(8, root->right);    root->right->right->right = newNode(0, root->right->right);    root->right->right->right->right = newNode(7, root->right->right->right);    Node * currentNode = root->left->left->left->left;    cout<<"The current node is "<<currentNode->data<<endl;    Node* rightSibling = findRightSiblingNodeBT(currentNode, 0);    if (rightSibling)       cout<<"The right sibling of the current node is "<<rightSibling->data;    else       cout<<"No right siblings found!";    return 0; }

आउटपुट

The current node is 3 The right sibling of the current node is 7

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

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

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

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

  1. C++ में बाइनरी सर्च ट्री में न्यूनतम मान वाला नोड ज्ञात करें C++ में बाइनरी सर्च ट्री में न्यूनतम मान वाला नोड ज्ञात करें

    मान लीजिए हमारे पास एक बाइनरी सर्च ट्री है। हमें बाइनरी सर्च ट्री में न्यूनतम तत्व ढूंढना है। इसलिए यदि BST नीचे की तरह है: न्यूनतम तत्व 1 होगा। जैसा कि हम जानते हैं कि बायां उपट्री हमेशा छोटे तत्वों को धारण करता है। इसलिए यदि हम बाएं उपट्री के माध्यम से तब तक ट्रैवर्स करते हैं जब तक बायां NULL नही