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

C++ में बाइनरी ट्री में K लीफ वाले सभी नोड्स प्रिंट करना


इस समस्या में, हमें एक बाइनरी ट्री और एक पूर्णांक K दिया गया है और हमें बाइनरी ट्री के उन सभी नोड्स को प्रिंट करना है जिनके चाइल्ड सबट्री में K लीफ हैं।

बाइनरी ट्री

बाइनरी ट्री एक विशेष ट्री है जिसके प्रत्येक नोड में अधिकतम दो नोड्स होते हैं (एक/दो/कोई नहीं)।

लीफ नोड

बाइनरी ट्री का लीफ नोड ट्री के अंत में स्थित नोड है।

उदाहरण

C++ में बाइनरी ट्री में K लीफ वाले सभी नोड्स प्रिंट करना

K = 2

आउटपुट - {S}

इस समस्या को हल करने के लिए, हम ट्री के लिए पोस्टऑर्डर ट्रैवर्सल करेंगे। अब, हम प्रत्येक बाएं सबट्री और दाएं सबट्री को देखेंगे यदि लीफ का योग K है, तो वर्तमान नोड प्रिंट करें अन्यथा रिकर्सिवली कॉल करें, सबट्री के लीफ काउंट।

यह समाधान ट्रैवर्सल पर आधारित है इसलिए कॉम्प्लेक्सिटी ट्री के आकार के क्रम की होगी। टाइम कॉम्प्लेक्सिटी - O(n)

उदाहरण

उपरोक्त दृष्टिकोण को लागू करने वाला प्रोग्राम:

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

struct Node { 
    char data; 
    struct Node *left, *right; 
}; 

struct Node *insertNode(char data) { 
    struct Node *node = new Node; 
    node->data = data; 
    node->left = node->right = NULL; 
    return (node); 
} 

int nodeWithKLeave(struct Node *ptr, int k) { 
    if (ptr == NULL) 
        return 0; 
    if (ptr->left == NULL && ptr->right == NULL) 
        return 1; 
    int total = nodeWithKLeave(ptr->left, k) + nodeWithKLeave(ptr->right, k); 
    if (k == total) 
        cout << ptr->data << " "; 
    return total; 
} 

int main() { 
    struct Node *root = insertNode('A'); 
    root->left = insertNode('B'); 
    root->right = insertNode('K'); 
    root->left->left = insertNode('N'); 
    root->left->right = insertNode('S'); 
    root->left->left->left = insertNode('X'); 
    root->left->left->right = insertNode('H'); 
    root->right->right = insertNode('E'); 
    root->right->left = insertNode('T'); 
    root->right->left->left = insertNode('O'); 
    root->right->left->right = insertNode('P'); 
    int K = 2; 
    cout << "Nodes with " << K << " leaves are :\n"; 
    nodeWithKLeave(root, K); 
    return 0; 
}

आउटपुट

Nodes with 2 leaves are: N T

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

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

  1. C++ में दिए गए परफेक्ट बाइनरी ट्री के सभी नोड्स का योग ज्ञात करें C++ में दिए गए परफेक्ट बाइनरी ट्री के सभी नोड्स का योग ज्ञात करें

    मान लीजिए हमारे पास एक धनात्मक पूर्णांक L है, जो परफेक्ट बाइनरी ट्री में स्तरों की संख्या दर्शाता है। इस परफेक्ट बाइनरी ट्री में पत्ती नोड्स को 1 से n तक संख्या दी गई है। जहां n पत्ती नोड्स की संख्या है। पैरेंट नोड बच्चों का योग है। हमारा कार्य इस परफेक्ट बाइनरी ट्री के सभी नोड्स का योग प्रिंट करने

  1. C++ प्रोग्राम: बाइनरी ट्री में सभी नोड्स के लेवल प्रिंट करना C++ प्रोग्राम: बाइनरी ट्री में सभी नोड्स के लेवल प्रिंट करना

    दिए गए बाइनरी ट्री में, कार्य 1 से n तक शुरू होने वाले प्रत्येक कुंजी से जुड़े लेवल को प्रिंट करना है जो एक नोड में संग्रहीत है। उपरोक्त ट्री में नोड्स हैं - 10 at level 1 3 and 211 at level 2 140, 162, 100 and 146 at level 3 दिए गए कुंजी के लिए प्रोग्राम को उस विशेष कुंजी का लेवल प्रिंट करना होगा।