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

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

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

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट :

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

आउटपुट :8

स्पष्टीकरण -

All leaf nodes of the tree are : 1, 8
Sum = 1 + 8 = 9

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

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

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम

#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 findRightLeavesSum(Node *root){
   int sum = 0;
   if (root != NULL){
      if (isLeafNode(root->right))
         sum += root->right->key;
      else
         sum += findRightLeavesSum(root->right);
      sum += findRightLeavesSum(root->left);
   }
   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 right leaves of the tree is "<<findRightLeavesSum(root);
   return 0;
}

आउटपुट

The sum of right leaves of the tree is 8

Iteration का उपयोग करने वाला दूसरा तरीका

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

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम

#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 findRightLeavesSum(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->right != NULL){
         treeNodes.push(currentNode->right);
         if(currentNode->right->right == NULL &&
            currentNode->right->left == NULL){
            sum += currentNode->right->key ;
         }
      }
      if (currentNode->left != NULL)
         treeNodes.push(currentNode->left);
   }
   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 right leaves of the tree is "<<findRightLeavesSum(root);
   return 0;
}

आउटपुट

The sum of right leaves of the tree is 8

दृष्टिकोण 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 findRightLeavesSum(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, 0 });
      }
      if (temp->right) {
         leftTreeNodes.push({ temp->right, 1 });
      }
   }
   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 right leaves of the tree is "<<findRightLeavesSum(root);
   return 0;
}

आउटपुट

The sum of right leaves of the tree is 8

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

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

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

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

  1. C++ में एक बाइनरी ट्री में चिल्ड्रन सम प्रॉपर्टी की जाँच करें

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। बाइनरी ट्री तब मान्य होता है जब वह निम्नलिखित गुणों से मिलता है। प्रत्येक नोड में बाएँ और दाएँ बच्चों के मानों के योग के समान डेटा मान होना चाहिए। अगर किसी भी तरफ बच्चे नहीं हैं, तो इसे 0 माना जाएगा। मान लीजिए नीचे की तरह एक पेड़ मौजूद है, जो दिए गए गुण स