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

C++ में बाइनरी ट्री की न्यूनतम गहराई ज्ञात करें


इस समस्या में, हमें एक बाइनरी ट्री दी गई है। हमारा कार्य बाइनरी ट्री की न्यूनतम गहराई ज्ञात करना है।

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

बाइनरी ट्री की न्यूनतम गहराई रूट नोड से किसी भी लीफ नोड तक का सबसे छोटा पथ होता है।

आइए एक उदाहरण से समझते हैं:

इनपुट

C++ में बाइनरी ट्री की न्यूनतम गहराई ज्ञात करें

आउटपुट

2

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

समस्या का समाधान बाइनरी ट्री को पार करके ऊंचाइयों की गिनती करके किया जाता है। यह प्रत्येक नोड के लिए चाइल्ड नोड के लिए पुनरावर्ती रूप से कॉल करके और प्रत्येक लीफ नोड के लिए 1 लौटाकर किया जा सकता है।

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम (पुनरावर्ती दृष्टिकोण):

उदाहरण

#include<bits/stdc++.h> using namespace std; struct Node {    int data;    struct Node* left, *right; }; int findMinDepthBT(Node *currentNode) {    if (currentNode == NULL)       return 0;    if (currentNode->left == NULL && currentNode->right == NULL)       return 1;    if (!currentNode->left)       return findMinDepthBT(currentNode->right) + 1;    if (!currentNode->right)       return findMinDepthBT(currentNode->left) + 1;       return min(findMinDepthBT(currentNode->left),    findMinDepthBT(currentNode->right)) + 1; } Node *newNode(int data) {    Node *temp = new Node;    temp->data = data;    temp->left = temp->right = NULL;    return (temp); } int main() {    Node *root = newNode(5);    root->left = newNode(2);    root->right = newNode(9);    root->left->left = newNode(5);    root->left->right = newNode(1);    root->left->left->left = newNode(7);    root->left->left->right = newNode(3);    cout<<"The minimum depth of binary tree is "<<findMinDepthBT(root);    return 0; }

आउटपुट

The minimum depth of binary tree is 2

यह दृष्टिकोण काफी कुशल है लेकिन हम न्यूनतम गहराई को अधिक प्रभावी ढंग से खोजने के लिए अन्य ट्रैवर्सल तकनीकों का उपयोग कर सकते हैं।

ऐसा ही एक दृष्टिकोण लेवल ऑर्डर ट्रैवर्सल का उपयोग करना है जिसमें हम ट्री को लेवल दर लेवल पार करते हैं। और हम उस लेवल नंबर को लौटाएँगे जिसमें हमारा पहला लीफ नोड मिलता है।

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम (लेवल ऑर्डर ट्रैवर्सल):

उदाहरण

#include<bits/stdc++.h> using namespace std; struct Node {    int data;    struct Node *left, *right; }; struct lOrderQueue {    Node *node;    int depth; }; int findMinDepthBT(Node *root) {    if (root == NULL)       return 0;    queue<lOrderQueue> levelOrder;    lOrderQueue deQueue = {root, 1};    levelOrder.push(deQueue);    while (levelOrder.empty() == false) {       deQueue = levelOrder.front();       levelOrder.pop();       Node *node = deQueue.node;       int depth = deQueue.depth;       if (node->left == NULL && node->right == NULL)          return depth;       if (node->left != NULL) {          deQueue.node = node->left;          deQueue.depth = depth + 1;          levelOrder.push(deQueue);       }       if (node->right != NULL) {          deQueue.node = node->right;          deQueue.depth = depth+1;          levelOrder.push(deQueue);       }    }    return 0; } Node* newNode(int data) {    Node *temp = new Node;    temp->data = data;    temp->left = temp->right = NULL;    return temp; } int main() {    Node *root = newNode(5);    root->left = newNode(2);    root->right = newNode(9);    root->left->left = newNode(5);    root->left->right = newNode(1);    root->left->left->left = newNode(7);    root->left->left->right = newNode(3);    cout<<"The minimum depth of binary tree is "<<findMinDepthBT(root);    return 0; }

आउटपुट

The minimum depth of binary tree is 2

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

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

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

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

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

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