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

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


इस समस्या में, हमें एक बाइनरी ट्री दिया गया है। हमारा कार्य दिए गए बाइनरी ट्री में सभी बाएं पत्तियों का योग ज्ञात करना है।

उदाहरण से समझते हैं:

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

आउटपुट: 11

व्याख्या:

ट्री के सभी पत्ती नोड्स हैं: 2, 9 योग = 2 + 9 = 11

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

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

उदाहरण

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम:

#include <iostream> using namespace std; struct Node{    int key;    struct Node* left, *right; }; Node *newNode(char k){    Node *node = new Node;    node->key = k;    node->right = node->left = NULL;    return node; } bool isLeafNode(Node *node){    if (node == NULL)       return false;    if (node->left == NULL && node->right == NULL)       return true;    return false; } int findLeftLeavesSum(Node *root){    int sum = 0;    if (root != NULL){       if (isLeafNode(root->left))          sum += root->left->key;       else          sum += findLeftLeavesSum(root->left);       sum += findLeftLeavesSum(root->right);    }    return sum; } int main(){    struct Node *root = newNode(5);    root->left = newNode(4);    root->right = newNode(6);    root->left->left = newNode(2);    root->left->right = newNode(1);    root->right->left = newNode(9);    root->right->right = newNode(7);    cout<<"The sum of left leaves of the tree is "<<findLeftLeavesSum(root);    return 0; }

आउटपुट

The sum of left leaves of the tree is 11

पुनरावृत्ति का उपयोग करके एक अन्य दृष्टिकोण

हम ट्री पर डेप्थ फर्स्ट सर्च ट्रैवर्सल करेंगे, और फिर जांचेंगे कि क्या वर्तमान नोड बायां पत्ता है। यदि हां, तो इसके मान को योग में जोड़ें, अन्यथा छोड़ दें। अंत में, योग प्रिंट करें।

उदाहरण

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम:

#include<bits/stdc++.h> using namespace std; struct Node{    int key;    struct Node* left, *right; }; Node *newNode(char k){    Node *node = new Node;    node->key = k;    node->right = node->left = NULL;    return node; } int findLeftLeavesSum(Node* root){    if(root == NULL)     return 0;    stack<Node*> treeNodes;    treeNodes.push(root);    int sum = 0;    while(treeNodes.size() > 0){       Node* currentNode = treeNodes.top();       treeNodes.pop();       if (currentNode->left != NULL){          treeNodes.push(currentNode->left);          if(currentNode->left->left == NULL &&          currentNode->left->right == NULL){             sum += currentNode->left->key ;          }       }       if (currentNode->right != NULL)       treeNodes.push(currentNode->right);    }    return sum; } int main(){    Node *root = newNode(5);    root->left= newNode(4);    root->right = newNode(6);    root->left->left = newNode(2);    root->left->right = newNode(1);    root->right->left = newNode(9);    root->right->right= newNode(7);    cout<<"The sum of left leaves of the tree is "<<findLeftLeavesSum(root);    return 0; }

आउटपुट

The sum of left leaves of the tree is 11

दृष्टिकोण 3, BFS का उपयोग करके

हम एक ब्रेडथ फर्स्ट सर्च करेंगे जिसमें एक वेरिएबल होगा जो इंगित करेगा कि नोड बायां चाइल्ड है या नहीं। यदि है, तो इसे योग में जोड़ें, अन्यथा छोड़ दें। अंत में, योग प्रिंट करें।

उदाहरण

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम:

#include<bits/stdc++.h> using namespace std; struct Node{    int key; struct Node* left, *right; }; Node *newNode(char k){    Node *node = new Node;    node->key = k;    node->right = node->left = NULL;    return node; } int findLeftLeavesSum(Node* root) {    if (root == NULL)     return 0;    queue<pair<Node*, bool> > leftTreeNodes;    leftTreeNodes.push({ root, 0 });    int sum = 0;    while (!leftTreeNodes.empty()) {       Node* temp = leftTreeNodes.front().first;       bool is_left_child = leftTreeNodes.front().second;       leftTreeNodes.pop();       if (!temp->left && !temp->right && is_left_child)       sum = sum + temp->key;       if (temp->left) {          leftTreeNodes.push({ temp->left, 1 });       }       if (temp->right) {          leftTreeNodes.push({ temp->right, 0 });       }    }    return sum; } int main(){    Node *root = newNode(5);    root->left= newNode(4);    root->right = newNode(6);    root->left->left = newNode(2);    root->left->right = newNode(1);    root->right->left = newNode(9);    root->right->right= newNode(7);    cout<<"The sum of left leaves of the tree is "<<findLeftLeavesSum(root);    return 0; }

आउटपुट

The sum of left leaves of the tree is 11

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

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

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

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

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

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