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

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

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

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

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

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

उदाहरण के लिए

इनपुट -

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

आउटपुट - गिनती 2 है

स्पष्टीकरण - दिए गए पेड़ में 2 नोड होते हैं यानी 40 और 50 ठीक एक बच्चे या आधे नोड्स के साथ अन्य नोड्स में दो बच्चे हो सकते हैं या कोई बच्चा नहीं हो सकता है।

पुनरावर्ती

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

  • डेटा भाग, बाएँ सूचक और दाएँ सूचक वाले नोड की संरचना बनाएँ।

  • बाइनरी ट्री में नोड्स डालने के लिए एक फ़ंक्शन बनाएँ।

  • आधा नोड्स गिनने के लिए एक फ़ंक्शन बनाएं।

  • किसी फ़ंक्शन के अंदर, IF !node जांचें और फिर वापस आएं क्योंकि पेड़ में कोई नोड नहीं है।

  • आधे नोड्स की संख्या को संग्रहीत करने के लिए एक अस्थायी चर गणना की घोषणा करें

  • एक कतार प्रकार चर बनाएं मान लें कि qu

  • कतार में नोड्स को qu.push(node) के रूप में पुश करें

  • लूप जबकि !qu.empty()

  • एक अस्थायी चर बनाएँ मान लें कि नोड प्रकार का अस्थायी है और इसे कतार के साथ प्रारंभ करें। सामने ()

  • qu.pop()

    . का उपयोग करके तत्वों को पॉप करें
  • IF (!temp-> लेफ्ट और टेम्प-> राइट) या (temp-> लेफ्ट और !temp-> राइट) चेक करें और फिर काउंट को 1 तक बढ़ा दें

  • IF (temp->left !=NULL) चेक करें और फिर qu.push(temp->left)

    perform करें
  • गिनती लौटाएं

  • परिणाम प्रिंट करें।

उदाहरण

// Program to count half nodes in a Binary Tree
#include <iostream>
#include <queue>
using namespace std;
struct Node{
   int data;
   struct Node* left, *right;
};
// Function to get the count of half Nodes
int halfcount(struct Node* node){
   // If tree is empty
   if (!node)
   return 0;
   int result = 0; // Initialize count of half nodes
   // Do level order traversal starting from root
   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;
}
/* To allocate new Node with the given data and NULL left
and right pointers. */
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

पुनरावर्ती

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

  • डेटा भाग, बाएँ सूचक और दाएँ सूचक वाले नोड की संरचना बनाएँ।

  • बाइनरी ट्री में नोड्स डालने के लिए एक फ़ंक्शन बनाएँ।

  • आधा नोड्स गिनने के लिए एक फ़ंक्शन बनाएं।

  • किसी फ़ंक्शन के अंदर, IF !node जांचें और फिर वापस आएं क्योंकि पेड़ में कोई नोड नहीं है।

  • आधे नोड्स की संख्या को संग्रहीत करने के लिए एक अस्थायी चर गणना की घोषणा करें

  • IF (रूट -> लेफ्ट =न्यूल और रूट-> राइट! =न्यूल) या (रूट -> लेफ्ट! =न्यूल और रूट-> राइट ==न्यूल) चेक करें, फिर काउंट को 1 से बढ़ा दें

  • सेट काउंट =काउंट + रिकर्सिव_कॉल_टो_थिस_फंक्शन (रूट-> लेफ्ट) + रिकर्सिव_कॉल_टो_थिस_फंक्शन (रूट-> राइट)

  • गिनती लौटाएं

  • परिणाम प्रिंट करें।

उदाहरण

// Recursive program to count half nodes
#include <bits/stdc++.h>
using namespace std;
// A binary tree Node has data, pointer to left
// child and a pointer to right child
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;
}
/* to allocate a new Node with the given data and NULL left
and right pointers. */
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++ में एक बाइनरी ट्री में सभी पूर्ण नोड्स प्रिंट करें

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

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

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

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

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