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

बाइनरी ट्रीइन सी++ में किसी दिए गए नोड के चचेरे भाई प्रिंट करें

बाइनरी ट्री एक विशेष वृक्ष है जिसके प्रत्येक नोड में अधिकतम दो बच्चे नोड होते हैं। इसलिए, प्रत्येक नोड या तो लीफ नोड होता है या उसमें एक या दो चाइल्ड नोड होते हैं।

उदाहरण,

बाइनरी ट्रीइन सी++ में किसी दिए गए नोड के चचेरे भाई प्रिंट करें

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

आइए एक उदाहरण लेते हैं,

बाइनरी ट्रीइन सी++ में किसी दिए गए नोड के चचेरे भाई प्रिंट करें

उपरोक्त बाइनरी ट्री के लिए, कजिन नोड 5 है।

अवधारणा को और स्पष्ट करने के लिए चचेरे भाई नोड का वर्णन करें। बाइनरी ट्री में, दो नोड्स को कजिन नोड कहा जाता है यदि वे बाइनरी ट्री में समान स्तर (गहराई) पर हों, लेकिन समान पैरेंट नोड न हों।

आइए अब इस समस्या का समाधान तैयार करें।

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

उदाहरण

अब, इस तर्क के आधार पर एक प्रोग्राम बनाते हैं -

#include <bits/stdc++.h>
using namespace std;
struct Node{
   int data;
   Node *left, *right;
};
Node *newNode(int item){
   Node *temp = new Node;
   temp->data = item;
   temp->left = temp->right = NULL;
   return temp;
}
int levelOfNode(Node *root, Node *node, int level){
   if (root == NULL)
      return 0;
   if (root == node)
      return level;
   int downlevel = levelOfNode(root->left,
   node, level + 1);
   if (downlevel != 0)
      return downlevel;
   return levelOfNode(root->right, node, level + 1);
}
void printCousin(Node* root, Node *node, int level){
   if (root == NULL || level < 2)
      return;
   if (level == 2){
      if (root->left == node || root->right == node)
         return;
      if (root->left)
         cout << root->left->data << " ";
      if (root->right)
         cout << root->right->data;
   }
   else if (level > 2){
      printCousin(root->left, node, level - 1);
      printCousin(root->right, node, level - 1);
   }
}
void cousinNode(Node *root, Node *node){
   int level = levelOfNode(root, node, 1);
   printCousin(root, node, level);
}
int main(){
   Node *root = newNode(11);
   root->left = newNode(15);
   root->right = newNode(4);
   root->left->left = newNode(3);
   root->left->right = newNode(7);
   root->left->right->right = newNode(9);
   root->right->left = newNode(17);
   root->right->right = newNode(8);
   root->right->left->right = newNode(5);
   cout<<”The cousin nodes are : \t”
   cousinNode(root, root->right->right);
   return 0;
}

आउटपुट

The cousin nodes are : 3 7

  1. C++ में बाइनरी ट्री में सभी k-योग पथ प्रिंट करें

    इस समस्या में, हमें एक बाइनरी ट्री और एक नंबर K दिया जाता है और हमें ट्री में सभी पथ प्रिंट करने होते हैं जिनमें पथ में नोड्स का योग k के बराबर होता है। यहां, पेड़ का पथ पेड़ के किसी भी नोड से शुरू हो सकता है और किसी भी नोड पर समाप्त हो सकता है। पथ हमेशा रूट नोड से लीफ नोड तक निर्देशित होना चाहिए।

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

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

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

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