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

C++ में दिए गए बाइनरी ट्री के बाएं लीफ नोड्स का योग ढूंढें

मान लीजिए हमारे पास एक बाइनरी ट्री है जिसमें एक रूट नोड और उसका बायां बच्चा और दायां बच्चा है। कार्य ट्री के उन लीफ नोड्स का कुल योग ढूंढना है जो अपने पैरेंट नोड के बाईं ओर हैं।

उदाहरण के लिए

इनपुट-1:

      C++ में दिए गए बाइनरी ट्री के बाएं लीफ नोड्स का योग ढूंढें

आउटपुट:

15

व्याख्या: दिए गए इनपुट बाइनरी ट्री में, सभी बाएं लीफ नोड्स का योग 9+4+2 = 15 है। इसलिए, आउटपुट 15 है।

इस समस्या को हल करने का दृष्टिकोण

हमारे पास एक बाइनरी ट्री है और कार्य उन सभी लीफ नोड्स का योग ढूंढना है जो अपने पैरेंट के बाईं ओर हैं।

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

  • रूट नोड्स और उसके बाएं बच्चे के साथ-साथ दाएं बच्चे वाले बाइनरी ट्री को इनपुट के रूप में लें।
  • एक पूर्णांक फ़ंक्शन leftLeafSum(treenode*root) रूट नोड को इनपुट के रूप में लेता है और उन सभी लीफ नोड्स का योग लौटाता है जो अपने पैरेंट के बाईं ओर हैं।
  • यदि रूट नोड खाली या NULL है, तो 'शून्य' लौटाएं अन्यथा रूट नोड के बाएं नोड की जांच करें।
  • यदि रूट नोड का बायां नोड बिना किसी बच्चे के है, तो दाएं नोड के लिए पुनरावर्ती रूप से जांचें।
  • बाएं बच्चे और दाएं बच्चे के लिए पुनरावर्ती रूप से योग लौटाएं।

उदाहरण

#include<bits/stdc++.h>
using namespace std;
struct treenode {
    int data;
    treenode * left;
    treenode * right;
};
struct treenode * createNode(int d) {
    struct treenode * root = new treenode;
    root -> data = d;
    root -> left = NULL;
    root -> right = NULL;
    return root;
}
int leftLeafSum(treenode * root) {
    if (root == NULL) {
        return 0;
    }
    if (root -> left and!root -> left -> left and!root -> left -> right) {
        return root -> left -> data + leftLeafSum(root -> right);
    }
    return leftLeafSum(root -> left) + leftLeafSum(root -> right);
}
int main() {
    struct treenode * root = NULL;
    root = createNode(4);
    root -> left = createNode(2);
    root -> right = createNode(2);
    root -> left -> right = createNode(7);
    root -> left -> left = createNode(5);
    root -> right -> left = createNode(5);
    root -> right -> right = createNode(7);
    int sum = leftLeafSum(root);
    cout << sum << endl;
    return 0;
}

उपरोक्त कोड चलाने से आउटपुट इस प्रकार उत्पन्न होगा,

आउटपुट

10

व्याख्या: बाएं नोड्स में लीफ नोड्स 5 और 5 हैं जो अपने पैरेंट के बाईं ओर हैं, इस प्रकार सभी लीफ नोड्स का योग = 10 है।

  1. C++ में बाइनरी ट्री में निकटतम लीफ ढूंढें C++ में बाइनरी ट्री में निकटतम लीफ ढूंढें

    मान लीजिए, एक बाइनरी ट्री दिया गया है। इसमें अलग-अलग लेवल पर लीफ नोड्स हैं। एक और पॉइंटर दिया गया है, जो एक नोड को इंगित कर रहा है। हमें इंगित नोड से निकटतम लीफ नोड की दूरी ढूंढनी है। ट्री को नीचे जैसा मानें - यहां लीफ नोड्स 2, -2 और 6 हैं। यदि पॉइंटर नोड -5 पर इंगित कर रहा है, तो -5 से निकटतम नोड

  1. बाइनरी ट्री में रूट से दिए गए नोड तक की दूरी खोजें C++ में बाइनरी ट्री में रूट से दिए गए नोड तक की दूरी खोजें C++ में

    मान लीजिए हमारे पास कुछ नोड्स के साथ एक बाइनरी ट्री है। हमें रूट और दूसरे नोड u के बीच की दूरी खोजनी है। मान लीजिए ट्री नीचे जैसा है: अब (रूट, 6) के बीच की दूरी = 2, पथ की लंबाई 2 है, (रूट, 8) के बीच की दूरी = 3 आदि। इस समस्या को हल करने के लिए, हम नोड को बाएं और दाएं सबट्री में खोजने के लिए एक पुन

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

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