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

सी ++ में पैरेंट सरणी द्वारा दर्शाए गए बाइनरी ट्री की ऊंचाई पाएं

इस समस्या में, हमें n आकार का एक सरणी arr[] दिया जाता है जो एक पेड़ को दर्शाता है। हमारा काम है पैरेंट ऐरे द्वारा दर्शाए गए बाइनरी ट्री की ऊंचाई का पता लगाना।

एक बाइनरी सर्च ट्री (BST) एक पेड़ है जिसमें सभी नोड्स नीचे बताए गए गुणों का पालन करते हैं -

  • बाएं उप-वृक्ष की कुंजी का मान उसके पैरेंट (रूट) नोड की कुंजी के मान से कम है।
  • राइट सबट्री की कुंजी का मान उसके पैरेंट (रूट) नोड की कुंजी के मान से अधिक या उसके बराबर है।

पेड़ की ऊंचाई रूट नोड से सबसे दूर लीफ नोड तक जाने पर ट्रैवर्स किए गए नोड्स की संख्या है।

समाधान दृष्टिकोण:

समस्या का एक सरल समाधान पैरेंट एरे से एक ट्री बनाना है। इस पेड़ की जड़ का पता लगाना और पाए गए इंडेक्स के लिए बार-बार बाएँ और दाएँ सबट्री बनाना और फिर अधिकतम ऊँचाई लौटाना।

एक अधिक कुशल विधि सरणी और स्टोर से नोड्स की गहराई की गणना करेगी और फिर इसे गहराई से सरणी में संग्रहीत करेगी। इस सरणी से अधिकतम गहराई लौटाएं।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

उदाहरण

#include <bits/stdc++.h>
using namespace std;

void findAllDepths(int arr[], int i, int nodeDepth[]) {
   
   if (nodeDepth[i])
      return;
   if (arr[i] == -1) {
     
      nodeDepth[i] = 1;
      return;
   }
   if (nodeDepth[arr[i]] == 0)
      findAllDepths(arr, arr[i], nodeDepth);
   nodeDepth[i] = nodeDepth[arr[i]] + 1;
}

int findMaxHeightBT(int arr[], int n) {

   int nodeDepth[n];
   for (int i = 0; i < n; i++)
      nodeDepth[i] = 0;
   for (int i = 0; i < n; i++)
      findAllDepths(arr, i, nodeDepth);
   int maxHeight = nodeDepth[0];
   for (int i=1; i<n; i++)
      if (maxHeight < nodeDepth[i])
         maxHeight = nodeDepth[i];
   return maxHeight;
}

int main() {
   
   int arr[] = {-1, 0, 0, 1, 1};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout<<"The maximum height of binary Tree is "<<findMaxHeightBT(arr, n);
   return 0;
}

आउटपुट -

The maximum height of binary Tree is 3

  1. सी++ में आरएमक्यू का उपयोग करके बाइनरी ट्री में एलसीए खोजें

    अवधारणा लेख एक पेड़ में दो नोड्स के एलसीए को आरएमक्यू समस्या में कम करके खोजने की समस्या को हल करने के लिए एक विधि बताता है। उदाहरण निम्नतम सामान्य पूर्वज (LCA) जड़ वाले पेड़ में दो नोड्स a और b में से T को रूट से सबसे दूर स्थित नोड के रूप में परिभाषित किया गया है, जिसमें a और b दोनों वंशज हैं।

  1. सी ++ में ऐरे कार्यान्वयन के साथ बाइनरी ट्री

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

  1. C++ में बाइनरी ट्री में अधिकतम लम्बवत योग ज्ञात कीजिए

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। कार्य ऊर्ध्वाधर क्रम ट्रैवर्सल में सभी नोड्स के अधिकतम योग को प्रिंट करना है। तो अगर पेड़ नीचे जैसा है - लंबवत क्रम ट्रैवर्सल इस प्रकार है - 4 2 1 + 5 + 6 = 12 3 + 8 = 11 7 9 यहां अधिकतम 12 है। दृष्टिकोण सरल है। हम वर्टिकल ऑर्डर ट्रैवर्सल करेंगे, फिर योग