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

C++ में एक ही ट्रैवर्सल में बाइनरी ट्री का घनत्व (Density of Binary Tree)


बाइनरी ट्री का घनत्व इसके आकार को इसकी ऊंचाई से विभाजित करके गणना किया जाता है। बाइनरी ट्री घनत्व = आकार/ऊंचाई।

आइए पहले उस स्ट्रक्ट को परिभाषित करें जो एक ट्री नोड को दर्शाता है जिसमें डेटा और इसके बाएं और दाएं चाइल्ड नोड होते हैं। यदि यह बनाया जाने वाला पहला नोड है तो यह रूट नोड है अन्यथा चाइल्ड नोड।

struct Node { 
    int data; 
    struct Node *leftChild, *rightChild; 
};

इसके बाद हम createNode(int data) फंक्शन बनाते हैं जो एक int मान लेता है और इसे नोड के डेटा सदस्य को असाइन करता है। फंक्शन बने हुए स्ट्रक्ट Node का पॉइंटर वापस करता है। साथ ही, नव निर्मित नोड के बाएं और दाएं चाइल्ड को null पर सेट किया जाता है।

Node* createNode(int data){ 
    Node* node = new Node; 
    node->data = data; 
    node->leftChild = node->rightChild = NULL; 
    return node; 
}

हमारा treeDensity(Node *root) फंक्शन रूट नोड लेता है और जांचता है कि यह null है या नहीं। यह फिर size वेरिएबल घोषित करता है और इसे 0 पर सेट करता है। heightAndSize(root, size) फंक्शन का वापसी मान height वेरिएबल को असाइन किया जाता है। ऊंचाई और आकार के बीच फ्लोट विभाजन फिर वापस किया जाता है।

float treeDensity(Node* root){ 
    if (root == NULL) 
        return 0; 
    int size = 0; 
    int height = heightAndSize(root, size); 
    return (float)size / height; 
}

अगला, heightAndSize(Node* node, int &size) रूट नोड और size वेरिएबल का रेफरेंस लेता है। यदि रूट नोड null है तो 0 वापस किया जाता है। प्रत्येक सबट्री की ऊंचाई रिकर्सिव रूप से गणना की जाती है और प्रत्येक रिकर्सन पर आकार बढ़ाया जाता है। हम फिर बाएं या दाएं सबट्री में से बड़े को वापस करते हैं।

int heightAndSize(Node* node, int &size){ 
    if (node==NULL) 
        return 0; 
    int left = heightAndSize(node->leftChild, size); 
    int right = heightAndSize(node->rightChild, size); 
    size++; 
    return (left > right) ? ++left : ++right; 
}

उदाहरण

एक ही ट्रैवर्सल में बाइनरी ट्री घनत्व खोजने के लिए निम्नलिखित कार्यान्वयन देखें:

#include <iostream> 
using namespace std; 

struct Node{ 
    int data; 
    Node *leftChild, *rightChild; 
}; 

Node* createNode(int data){ 
    Node* node = new Node; 
    node->data = data; 
    node->leftChild = node->rightChild = NULL; 
    return node; 
} 

int heightAndSize(Node* node, int &size){ 
    if (node==NULL) 
        return 0; 
    int left = heightAndSize(node->leftChild, size); 
    int right = heightAndSize(node->rightChild, size); 
    size++; 
    return (left > right) ? ++left : ++right; 
} 

float treeDensity(Node* root){ 
    if (root == NULL) 
        return 0; 
    int size = 0; 
    int height = heightAndSize(root, size); 
    return (float)size / height; 
} 

int main(){ 
    Node* root = createNode(7); 
    root->leftChild = createNode(9); 
    root->rightChild = createNode(11); 
    cout<< "The density of the above given binary tree is "<<treeDensity(root); 
    return 0; 
}

आउटपुट

उपरोक्त कोड निम्नलिखित आउटपुट देगा:

The density of the above given binary tree is 1.5

  1. C++ में N-ary ट्री प्रीऑर्डर ट्रैवर्सल C++ में N-ary ट्री प्रीऑर्डर ट्रैवर्सल

    समस्या विवरण मान लीजिए हमारे पास एक N-ary ट्री है, हमें इसके नोड्स का प्रीऑर्डर ट्रैवर्सल ज्ञात करना है। उदाहरण यदि इनपुट ट्री है: तो आउटपुट होगा: [1,3,5,6,2,4] हल करने का दृष्टिकोण इस समस्या को हल करने के लिए निम्नलिखित चरणों का पालन करें: एक सरणी ans परिभाषित करें preorder() नामक एक विधि परिभ

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

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हम ट्री के नोड्स पर कैमरे लगाते हैं। अब प्रत्येक कैमरा एक नोड पर अपने माता-पिता, स्वयं और अपने बच्चों की निगरानी कर सकता है। हमें ट्री के सभी नोड्स की निगरानी के लिए आवश्यक कैमरों की न्यूनतम संख्या ज्ञात करनी है। यदि इनपुट है - तो आउटपुट 1 होगा, क्योंकि सभी क

  1. पायथन में बाइनरी ट्री का प्रीऑर्डर ट्रैवर्सल (Binary Tree Preorder Traversal) पायथन में बाइनरी ट्री का प्रीऑर्डर ट्रैवर्सल (Binary Tree Preorder Traversal)

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें उस ट्री का प्रीऑर्डर ट्रैवर्सल लौटाना है। यदि ट्री इस तरह है: तो प्रीऑर्डर ट्रैवर्सल होगा: [3,9,20,15,7] इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे: res और st नामक दो खाली सूचियाँ बनाएं। node := root जब तक node या st खाली नहीं है: जब