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

C++ में बाइनरी ट्री में नॉन-लीफ नोड्स की गिनती करें


हमें एक बाइनरी ट्री दिया गया है और कार्य बाइनरी ट्री में उपलब्ध नॉन-लीफ नोड्स की संख्या की गणना करना है।

बाइनरी ट्री डेटा संग्रहण उद्देश्यों के लिए उपयोग की जाने वाली एक विशेष डेटा संरचना है। एक बाइनरी ट्री की एक विशेष शर्त होती है कि प्रत्येक नोड के अधिकतम दो बच्चे हो सकते हैं। एक बाइनरी ट्री में एक क्रमबद्ध सरणी और एक लिंक्ड सूची दोनों के लाभ होते हैं क्योंकि खोज एक क्रमबद्ध सरणी की तरह तेज होती है और सम्मिलन या विलोपन ऑपरेशन लिंक्ड सूची की तरह तेज होते हैं। नॉन-लीफ नोड्स को पैरेंट नोड्स के रूप में भी जाना जाता है क्योंकि उनके 0 से अधिक बच्चे होते हैं और दो से कम बच्चे होते हैं।

बाइनरी ट्री की संरचना नीचे दी गई है -

C++ में बाइनरी ट्री में नॉन-लीफ नोड्स की गिनती करें

उदाहरण के लिए

इनपुट -

C++ में बाइनरी ट्री में नॉन-लीफ नोड्स की गिनती करें

आउटपुट - नॉन-लीफ नोड्स की गिनती: 3

व्याख्या - दिए गए ट्री में, हमारे पास 27, 14 और 35 नॉन-लीफ नोड्स के रूप में हैं क्योंकि उनके 0 से अधिक बच्चे हैं और 2 से कम बच्चे हैं।

नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण

  • बाइनरी ट्री की संरचना बनाएं जिसमें बाएं नोड का पॉइंटर, दाएं नोड का पॉइंटर और एक नोड में संग्रहीत डेटा भाग हो

  • एक फंक्शन बनाएं जो नोड को इन्सर्ट करेगा जब भी यह फंक्शन कॉल किया जाएगा। इसके लिए, नए नोड में डेटा इन्सर्ट करें और नए नोड के दाएं और बाएं पॉइंटर को NULL पर सेट करें और नोड लौटाएं।

  • एक रिकर्सिव फंक्शन बनाएं जो बाइनरी ट्री में नॉन-लीफ नोड्स की संख्या गिनेगा।

    • जांचें कि क्या रूट NULL है या रूट का बायां NULL है और रूट का दायां NULL है तो 0 लौटाएं
    • 1 + इस फंक्शन को बाएं पॉइंटर के साथ रिकर्सिव कॉल + इस फंक्शन को दाएं पॉइंटर के साथ रिकर्सिव कॉल लौटाएं
  • गिनती प्रिंट करें

उदाहरण

#include <iostream>
using namespace std;

// नोड की संरचना
struct Node {
    int data;
    struct Node* left;
    struct Node* right;
};

// नए नोड को परिभाषित करने के लिए
struct Node* newNode(int data) {
    struct Node* node = new Node;
    node->data = data;
    node->left = node->right = NULL;
    return (node);
}

// नॉन-लीफ नोड्स गिनें
int nonleaf(struct Node* root) {
    if (root == NULL || (root->left == NULL && root->right == NULL)) {
        return 0;
    }
    return 1 + nonleaf(root->left) + nonleaf(root->right);
}

// मुख्य फंक्शन
int main() {
    struct Node* root = newNode(10);
    root->left = newNode(21);
    root->right = newNode(33);
    root->left->left = newNode(48);
    root->left->right = newNode(51);
    cout << nonleaf(root);
    return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा -

count of non-leaf nodes is: 2

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

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

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

    इस समस्या में, हमें एक बाइनरी ट्री दी गई है और हमें बाइनरी ट्री के सभी लीफ नोड्स को दाएं से बाएं प्रिंट करना है। उदाहरण इनपुट - आउटपुट - 7 4 1 इस समस्या को हल करने के लिए, हमें बाइनरी ट्री को पार करना होगा। यह ट्रैवर्सल दो तरीकों से किया जा सकता है - प्रीऑर्डर ट्रैवर्सल यह ट्रैवर्सल रिकर्सन का

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

    प्रोग्राम को बाइनरी ट्री के लीफ नोड्स को बाएं से दाएं प्रिंट करना चाहिए लेकिन चुनौती केवल एक स्टैक का उपयोग करना है। push() फ़ंक्शन के माध्यम से बाइनरी ट्री के नोड्स डालें और pop() ऑपरेशन के माध्यम से लीफ नोड्स प्रदर्शित करें। लीफ नोड्स अंतिम नोड्स हैं जिनका बाएं और दाएं पॉइंटर NULL होता है जिसका अर