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

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


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

उदाहरण,

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

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

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

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-सम पाथ प्रिंट करना C++ में बाइनरी ट्री में सभी K-सम पाथ प्रिंट करना

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

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

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

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

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