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

सी ++ में बाइनरी ट्री में गैर-पत्ती नोड्स की गणना करें

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

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

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

सी ++ में बाइनरी ट्री में गैर-पत्ती नोड्स की गणना करें

उदाहरण के लिए

इनपुट -

सी ++ में बाइनरी ट्री में गैर-पत्ती नोड्स की गणना करें

आउटपुट - गैर-पत्ती नोड्स की संख्या है:3

स्पष्टीकरण - दिए गए पेड़ में, हमारे पास 27, 14 और 35 गैर-पत्ती नोड्स हैं क्योंकि उनके 0 से अधिक बच्चे हैं और 2 से कम बच्चे हैं।

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

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

  • एक फ़ंक्शन बनाएं जो इस फ़ंक्शन को कॉल किए जाने पर नोड सम्मिलित करेगा। उसके लिए, नए नोड में डेटा डालें और नए नोड के दाएं और बाएं पॉइंटर को NULL पर सेट करें और नोड को वापस करें।

  • एक पुनरावर्ती फ़ंक्शन बनाएं जो एक बाइनरी ट्री में गैर-पत्ती नोड्स की संख्या की गणना करेगा।

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

उदाहरण

#include <iostream>
using namespace std;
// Node's structure
struct Node {
   int data;
   struct Node* left;
   struct Node* right;
};
// To define the new node
struct Node* newNode(int data){
   struct Node* node = new Node;
   node->data = data;
   node->left = node->right = NULL;
   return (node);
}
// Count the non leaf nodes.
int nonleaf(struct Node* root){
   if (root == NULL || (root->left == NULL && root->right == NULL)){
      return 0;
   }
   return 1 + nonleaf(root->left) + nonleaf(root->right);
}
// Main function
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++ में बाइनरी ट्री के सभी आंतरिक नोड्स को प्रिंट करें

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

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

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

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

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