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

C++ में बाइनरी ट्री में आधे नोड्स गिनना (इटरेटिव और रिकर्सिव)


हमें एक बाइनरी ट्री दिया गया है और कार्य बाइनरी ट्री में उपलब्ध आधे नोड्स की संख्या की गणना करना है इटरेटिव और रिकर्सिव दृष्टिकोण का उपयोग करके। आधे नोड्स वे नोड्स हैं जिनका केवल एक बच्चा है और दूसरा बच्चा null है। ध्यान दें कि आधे नोड्स में हम लीफ नोड्स पर विचार नहीं करते।

उदाहरण

इनपुट: बाइनरी ट्री की छवि

आउटपुट: count is 2

व्याख्या: दिए गए ट्री में 2 नोड्स यानी 40 और 50 हैं जिनका ठीक एक बच्चा है या आधे नोड्स हैं अन्य नोड्स के दो बच्चे हो सकते हैं या कोई बच्चा नहीं।

इटरेटिव दृष्टिकोण

उपयोग किया गया दृष्टिकोण:

  • डेटा पार्ट, लेफ्ट पॉइंटर और राइट पॉइंटर वाला नोड का स्ट्रक्चर बनाएं
  • बाइनरी ट्री में नोड्स डालने के लिए एक फ़ंक्शन बनाएं
  • आधे नोड्स गिनने के लिए एक फ़ंक्शन बनाएं
  • फ़ंक्शन के अंदर, जांचें यदि !नोड तो वापस लौटें क्योंकि ट्री में कोई नोड नहीं है
  • आधे नोड्स की संख्या स्टोर करने के लिए एक अस्थायी वैरिएबल काउंट घोषित करें
  • क्यू टाइप वैरिएबल बनाएं मान लीजिए qu
  • नोड्स को क्यू में डालें qu.push(नोड)
  • लूप चलाएं जब तक !qu.empty():
    • Node टाइप का एक अस्थायी वैरिएबल बनाएं मान लीजिए temp और इसे queue.front() से इनिशियलाइज़ करें
    • qu.pop() का उपयोग करके एलिमेंट्स पॉप करें
    • जांचें यदि (!temp->left && temp->right) || (temp->left && !temp->right) तो काउंट को 1 से बढ़ाएं
    • जांचें यदि (temp->left != NULL) तो qu.push(temp->left) करें
    • जांचें यदि (temp->right != NULL) तो qu.push(temp->right) करें
  • काउंट वापस करें
  • परिणाम प्रिंट करें।

उदाहरण (C++ कोड)

// बाइनरी ट्री में आधे नोड्स गिनने का प्रोग्राम 
#include <iostream> 
#include <queue> 
using namespace std; 
struct Node{ 
    int data; 
    struct Node* left, *right; 
}; 
// आधे नोड्स की संख्या प्राप्त करने के लिए फ़ंक्शन 
int halfcount(struct Node* node){ 
    // यदि ट्री खाली है 
    if (!node) 
        return 0; 
    int result = 0; // आधे नोड्स की संख्या इनिशियलाइज़ करें 
    // रूट से लेवल ऑर्डर ट्रैवर्सल करें 
    queue<Node *> myqueue; 
    myqueue.push(node); 
    while (!myqueue.empty()){ 
        struct Node *temp = myqueue.front(); 
        myqueue.pop(); 
        if ((!temp->left && temp->right) || (temp->left && !temp->right)){ 
            result++; 
        } 
        if (temp->left != NULL){ 
            myqueue.push(temp->left); 
        } 
        if (temp->right != NULL){ 
            myqueue.push(temp->right); 
        } 
    } 
    return result; 
} 
/* दिए गए डेटा के साथ नया नोड आवंटित करने के लिए और NULL लेफ्ट और राइट पॉइंटर्स। */ 
struct Node* newNode(int data){ 
    struct Node* node = new Node; 
    node->data = data; 
    node->left = node->right = NULL; 
    return (node); 
} 
int main(void){ 
    struct Node *root = newNode(10); 
    root->left = newNode(20); 
    root->right = newNode(30); 
    root->left->left = newNode(40); 
    root->left->right = newNode(50); 
    root->left->left->right = newNode(60); 
    root->left->right->right = newNode(70); 
    cout << "count is: " << halfcount(root); 
    return 0; 
}

आउटपुट

count is: 2

रिकर्सिव दृष्टिकोण

उपयोग किया गया दृष्टिकोण:

  • डेटा पार्ट, लेफ्ट पॉइंटर और राइट पॉइंटर वाला नोड का स्ट्रक्चर बनाएं
  • बाइनरी ट्री में नोड्स डालने के लिए एक फ़ंक्शन बनाएं
  • आधे नोड्स गिनने के लिए एक फ़ंक्शन बनाएं
  • फ़ंक्शन के अंदर, जांचें यदि !नोड तो वापस लौटें क्योंकि ट्री में कोई नोड नहीं है
  • आधे नोड्स की संख्या स्टोर करने के लिए एक अस्थायी वैरिएबल काउंट घोषित करें
  • जांचें यदि (रूट->लेफ्ट == NULL && रूट->राइट != NULL) || (रूट->लेफ्ट != NULL && रूट->राइट == NULL) तो काउंट को 1 से बढ़ाएं
  • काउंट = काउंट + रिकर्सिव_कॉल_टू_दिस_फंक्शन(रूट->लेफ्ट) + रिकर्सिव_कॉल_टू_दिस_फंक्शन(रूट->राइट) सेट करें
  • काउंट वापस करें
  • परिणाम प्रिंट करें।

उदाहरण (C++ कोड)

// रिकर्सिव प्रोग्राम आधे नोड्स गिनने के लिए 
#include <bits/stdc++.h> 
using namespace std; 
// एक बाइनरी ट्री नोड में डेटा, लेफ्ट चाइल्ड का पॉइंटर और राइट चाइल्ड का पॉइंटर होता है 
struct Node{ 
    int data; 
    struct Node* left, *right; 
}; 
int halfcount(struct Node* root){ 
    if (root == NULL) 
        return 0; 
    int result = 0; 
    if ((root->left == NULL && root->right != NULL) || (root->left != NULL && root->right == NULL)){ 
        result++; 
    } 
    result += (halfcount(root->left) + halfcount(root->right)); 
    return result; 
} 
/* दिए गए डेटा के साथ नया नोड आवंटित करने के लिए और NULL लेफ्ट और राइट पॉइंटर्स। */ 
struct Node* newNode(int data){ 
    struct Node* node = new Node; 
    node->data = data; 
    node->left = node->right = NULL; 
    return (node); 
} 
int main(){ 
    struct Node *root = newNode(10); 
    root->left = newNode(20); 
    root->right = newNode(30); 
    root->left->left = newNode(40); 
    root->left->right = newNode(50); 
    root->left->left->right = newNode(60); 
    root->left->right->right = newNode(70); 
    cout << "count is: " << halfcount(root); 
    return 0; 
}

आउटपुट

count is: 2
  1. C++ में बाइनरी ट्री के सभी फुल नोड्स प्रिंट करना C++ में बाइनरी ट्री के सभी फुल नोड्स प्रिंट करना

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

  1. C++ में बाइनरी ट्री के सभी इंटरनल नोड्स प्रिंट करना C++ में बाइनरी ट्री के सभी इंटरनल नोड्स प्रिंट करना

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

  1. C++ में दिए गए बाइनरी ट्री का पोस्टऑर्डर रिकर्सिव ट्रैवर्सल करने का प्रोग्राम C++ में दिए गए बाइनरी ट्री का पोस्टऑर्डर रिकर्सिव ट्रैवर्सल करने का प्रोग्राम

    ट्री ट्रैवर्सल ग्राफ ट्रैवर्सल का एक रूप है। इसमें ट्री के प्रत्येक नोड को ठीक एक बार चेक या प्रिंट करना शामिल है। बाइनरी सर्च ट्री का पोस्टऑर्डर ट्रैवर्सल ट्री के नोड्स को (लेफ्ट, राइट, रूट) के क्रम में विजिट करता है। बाइनरी ट्री के पोस्टऑर्डर ट्रैवर्सल का एक उदाहरण निम्नलिखित है। एक बाइनरी ट्री नि