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

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. C++ में RMQ का उपयोग करके बाइनरी ट्री में LCA खोजें C++ में RMQ का उपयोग करके बाइनरी ट्री में LCA खोजें

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

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

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

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

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