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

C++ में बाइनरी ट्री की गणना

बाइनरी ट्री की गणना किसी दिए गए आकार (नोड्स की विशिष्ट संख्या) के अलग-अलग लेबल रहित बाइनरी पेड़ों की कुल संख्या की गणना कर रहा है। इस लेख में, हम n नोड्स के बाइनरी ट्री की संख्या गिनने के लिए एक प्रोग्राम बनाएंगे।

बाइनरी ट्री के नोड्स के लेबलिंग के आधार पर, यह दो प्रकार का होता है:

  • लेबल बाइनरी ट्री
  • बिना लेबल वाला बाइनरी ट्री

लेबल बाइनरी ट्री: यह एक बाइनरी ट्री है जिसमें एक पेड़ के नोड्स को मानों के साथ लेबल किया जाता है।

नोड्स की दी गई संख्या के लिए विभिन्न प्रकार के लेबल किए गए बाइनरी ट्री :

नोड्स की संख्या N =2

इसी तरह, हम एन नोड्स की संख्या के लिए अलग-अलग लेबल वाले बाइनरी ट्री की संख्या पा सकते हैं,

एन =1, गिनती =1

एन =2, गिनती =4
एन =3, गिनती =30

एन =4, गिनती =336

यहां, हम देख सकते हैं कि प्रत्येक लेबल वाले नोड के लिए लेबल रहित नोड्स के लिए सभी प्रकार की व्यवस्था की गई है। तो, गिनती n होगी! * बिना लेबल वाले बाइनरी ट्री की गिनती.

सी(एन) =एन! * ( (2n!) / (n+1)! * n! ) )

नोब्स एन की दी गई संख्या के लिए अलग-अलग लेबल रहित बाइनरी ट्री की संख्या को दर्शाने के लिए प्रोग्राम,

उदाहरण

#include <iostream>
using namespace std;

int fact(int n){
   if(n == 1)
      return 1;
   return n * fact(n - 1);
}

int distinctCountLabeledTree(int N){
   return ( (fact(N))*( fact(2*N) / ( fact(N+1)*fact(N)) ) ) ;
}

int main(){
   
   int N = 6;
   cout<<"The number of Distinct labeled Binary Tree is "<<distinctCountLabeledTree(N);
   return 0;
}

आउटपुट -

The number of Distinct labeled Binary Tree is 95040

बिना लेबल वाला बाइनरी ट्री: यह एक बाइनरी ट्री है जिसमें एक पेड़ के नोड्स को मानों के साथ लेबल नहीं किया जाता है।

नोड्स की दी गई संख्या के लिए विभिन्न प्रकार के लेबल रहित बाइनरी ट्री:

नोड्स की संख्या N =2

अलग लेबल रहित बाइनरी ट्री की संख्या =2

इसी तरह, हम N के लिए अलग-अलग लेबल रहित बाइनरी ट्री की संख्या ज्ञात कर सकते हैं।

एन =1, गिनती =1
एन =2, गिनती =2
एन =3, गिनती =5
एन =4, गिनती =14

इसका उपयोग करके हम एन नोड्स के लिए अलग-अलग लेबल रहित बाइनरी ट्री की संख्या तैयार कर सकते हैं,

यह कैटलन नंबर द्वारा दिया गया है,

एक अन्य सूत्र हो सकता है,

सी(एन) =(2एन!) / (एन+1)! * एन!

नोड्स N की दी गई संख्या के लिए अलग-अलग लेबल रहित बाइनरी ट्री की संख्या खोजने के लिए प्रोग्राम,

उदाहरण

#include <iostream>
using namespace std;

int fact(int n){
   if(n == 1)
      return 1;
   return n * fact(n - 1);
}

int distinctCount(int N){
   return ( fact(2*N) / ( fact(N+1)*fact(N) ) );
}

int main(){
   
   int N = 7;
   cout<<"The number of Distinct unlabeled Binary Tree is "<<distinctCount(N);
   return 0;
}

आउटपुट -

The number of Distinct unlabeled Binary Tree is 6

  1. C++ . में अद्वितीय बाइनरी सर्च ट्री II

    मान लीजिए कि हमारे पास एक पूर्णांक n है, हमें सभी संरचनात्मक रूप से अद्वितीय बाइनरी सर्च ट्री उत्पन्न करने होंगे जो 1 से n तक के मानों को संग्रहीत करते हैं। तो अगर इनपुट 3 है, तो पेड़ होंगे - इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - जेनरेट () नामक एक पुनरावर्ती फ़ंक्शन को परिभाषित करें,

  1. C++ में दो बाइनरी ट्री मर्ज करें

    मान लीजिए कि हमारे पास दो बाइनरी पेड़ हैं और विचार करें कि जब हम उनमें से एक को दूसरे को कवर करने के लिए रखते हैं, तो दो पेड़ों के कुछ नोड्स ओवरलैप हो जाते हैं जबकि अन्य ओवरलैपिंग होते हैं। हमें उन्हें एक नए बाइनरी ट्री में मिलाना होगा। मर्ज नियम इस तरह है कि यदि दो नोड्स ओवरलैपिंग कर रहे हैं, तो नो

  1. सी ++ प्रोग्राम में बाइनरी सर्च?

    द्विआधारी खोज, जिसे अर्ध-अंतराल खोज, लॉगरिदमिक खोज या बाइनरी चॉप के रूप में भी जाना जाता है, एक खोज एल्गोरिथ्म है जो एक क्रमबद्ध सरणी के भीतर लक्ष्य मान की स्थिति का पता लगाता है। बाइनरी खोज लक्ष्य मान की तुलना सरणी के मध्य तत्व से करती है। यदि वे समान नहीं हैं, तो आधा जिसमें लक्ष्य झूठ नहीं बोल सकत