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

C++ में बाइनरी ट्री में दी गई कुंजी का अगला दायां नोड ढूंढना


इस समस्या में, हमें एक बाइनरी ट्री BT और एक कुंजी मान दिया जाता है। हमारा कार्य दी गई कुंजी का अगला दायां नोड ढूंढना है।

बाइनरी ट्री डेटा स्टोरेज उद्देश्यों के लिए उपयोग की जाने वाली एक विशेष डेटा संरचना है।

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

इनपुट

key = 4

C++ में बाइनरी ट्री में दी गई कुंजी का अगला दायां नोड ढूंढना

आउटपुट

5

व्याख्या

नोड 4 के बगल में स्थित तत्व 5 है।

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

इस समस्या का एक सरल समाधान लेवल ऑर्डर ट्रैवर्सल का उपयोग करके बाइनरी ट्री को पार करना है। और दी गई कुंजी मान के लिए, हम जांचेंगे कि क्या ट्रैवर्सल में उसी लेवल पर नोड के बगल में कोई नोड मौजूद है। यदि हां, तो अगला नोड वापस करें, अन्यथा NULL वापस करें।

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

उदाहरण

#include <iostream> #include <queue> using namespace std; struct node {    struct node *left, *right;    int key; }; node* newNode(int key) {    node *temp = new node;    temp->key = key;    temp->left = temp->right = NULL;    return temp; } node* findNextRightNodeBT(node *root, int k) {    if (root == NULL)       return 0;    queue<node *> nodeVal;    queue<int> nodeLevel;    int level = 0;    nodeVal.push(root);    nodeLevel.push(level);    while (nodeVal.size()) {       node *node = nodeVal.front();       level = nodeLevel.front();       nodeVal.pop();       nodeLevel.pop();       if (node->key == k) {          if (nodeLevel.size() == 0 || nodeLevel.front() != level)             return NULL;          return nodeVal.front();       }         if (node->left != NULL) {          nodeVal.push(node->left);          nodeLevel.push(level+1);       }       if (node->right != NULL) {          nodeVal.push(node->right);          nodeLevel.push(level+1);       }    }    return NULL; } int main() {    node *root = newNode(1);    root->left = newNode(2);    root->right = newNode(3);    root->left->left = newNode(4);    root->left->right = newNode(5);    root->right->left = newNode(6);    int key = 4;    cout<<"The next right node of the node "<<key<<" is ";    node *nextNode = findNextRightNodeBT(root, key);    if(nextNode != NULL)       cout<<nextNode->key;    else       cout<<"not available";    return 0; }

आउटपुट

The next right node of the node 4 is 5

  1. C++ में प्रत्येक नोड II में अगले राइट पॉइंटर्स भरना C++ में प्रत्येक नोड II में अगले राइट पॉइंटर्स भरना

    मान लीजिए हमारे पास एक बाइनरी ट्री है, जहां प्रत्येक नोड में निम्नलिखित फ़ील्ड हैं: (data, left, right, next), left बाएं उपट्री की ओर इंगित करेगा, right दाएं उपट्री की ओर इंगित करेगा, और next पॉइंटर अगले नोड की ओर इंगित करेगा। यदि दाएं हाथ की तरफ कोई नोड नहीं है, तो वह null होगा। इसलिए प्रारंभ में प

  1. C++ में प्रत्येक नोड में अगले राइट पॉइंटर्स भरना C++ में प्रत्येक नोड में अगले राइट पॉइंटर्स भरना

    मान लीजिए हमारे पास एक पूर्ण बाइनरी ट्री है, जहां प्रत्येक नोड में निम्नलिखित फ़ील्ड हैं: (data, left, right, next), left बाएं उपट्री की ओर इंगित करेगा, right दाएं उपट्री की ओर इंगित करेगा, और next पॉइंटर अगले नोड की ओर इंगित करेगा। यदि दाएं हाथ की तरफ कोई नोड नहीं है, तो वह null होगा। इसलिए प्रारंभ

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

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