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

C++ में समान स्तरों पर पत्तियों के डेटा के योग का गुणन ज्ञात करें

अवधारणा

किसी दिए गए बाइनरी ट्री के संबंध में, इसके लिए निम्न मान लौटाएं।

  • प्रत्येक स्तर के संबंध में, यदि इस स्तर पर पत्तियाँ हैं तो सभी पत्तों का योग ज्ञात कीजिए। अन्यथा इसे अनदेखा करें।

  • सभी राशियों के गुणन की गणना करें और उसे वापस करें।

इनपुट

Root of following tree
      3
     / \
    8   6
         \
          10

आउटपुट

80

पहले स्तर में पत्ते नहीं होते हैं। दूसरे स्तर में एक पत्ता 8 होता है और तीसरे स्तर में भी एक पत्ता 10 होता है। तो परिणाम 8*10 =80

. होता है

इनपुट

Root of following tree
             3
           /  \
           8   6
          / \   \
         9 7   10
           / \  / \
           2 12 5 11

आउटपुट

270

पहले दो स्तरों में पत्ते नहीं होते हैं। थर्डलेवल में सिंगल लीफ 9 है। अंतिम लेवल में 2, 12, 5 और 11 के चार पत्ते हैं। तो परिणाम 9 * (2 + 12 + 5 + 11) =270

है।

विधि

एक सरल समाधान के संबंध में, हम ऊपर से नीचे तक सभी स्तरों के लिए लीफ योग की पुनरावर्ती गणना करते हैं। उसके बाद उन स्तरों के योगों को गुणा करें जिनमें पत्तियाँ हैं। यहाँ, इस समाधान की समय जटिलता O(n^2) होगी।

फिर से एक कुशल समाधान के संबंध में, हम कतार आधारित स्तर के आदेश ट्रैवर्सल को लागू करते हैं। यहां, ट्रैवर्सल करते समय, हम सभी अलग-अलग स्तरों को अलग-अलग संसाधित करते हैं। प्रत्येक संसाधित स्तर के संबंध में, सत्यापित करें कि इसमें पत्तियां हैं या नहीं। इस मामले में, यदि इसने लीफ नोड्स के योग की गणना की है। अंत में, सभी राशियों का उत्पाद लौटाएं।

उदाहरण

/* Iterative C++ program to find sum of data of all leaves
of a binary tree on same level and then multiply sums
obtained of all levels. */
#include <bits/stdc++.h>
using namespace std;
// Shows a Binary Tree Node
struct Node1 {
   int data1;
   struct Node1 *left1, *right1;
};
// Shows helper function to check if a Node is leaf of tree
bool isLeaf(Node1* root1){
   return (!root1->left1 && !root1->right1);
}
/* Compute sum of all leaf Nodes at each level and returns
multiplication of sums */
int sumAndMultiplyLevelData(Node1* root1){
   // Here tree is empty
   if (!root1)
      return 0;
   int mul1 = 1; /* Used To store result */
   // Build an empty queue for level order tarversal
   queue<Node1*> q1;
   // Used to Enqueue Root and initialize height
   q1.push(root1);
   // Perform level order traversal of tree
   while (1) {
      // NodeCount1 (queue size) indicates number of Nodes
      // at current lelvel.
      int NodeCount1 = q1.size();
      // Now if there are no Nodes at current level, we are done
      if (NodeCount1 == 0)
         break;
      // Used to initialize leaf sum for current level
         int levelSum1 = 0;
      // Shows a boolean variable to indicate if found a leaf
      // Node at current level or not
      bool leafFound1 = false;
      // Used to Dequeue all Nodes of current level and Enqueue
      all
      // Nodes of next level
      while (NodeCount1 > 0) {
         // Process next Node of current level
         Node1* Node1 = q1.front();
         /* Now if Node is a leaf, update sum at the level */
         if (isLeaf(Node1)) {
            leafFound1 = true;
            levelSum1 += Node1->data1;
         }
         q1.pop();
         // Add children of Node
         if (Node1->left1 != NULL)
            q1.push(Node1->left1);
         if (Node1->right1 != NULL)
            q1.push(Node1->right1);
         NodeCount1--;
      }
      // Now if we found at least one leaf, we multiply
      // result with level sum.
      if (leafFound1)
         mul1 *= levelSum1;
   }
   return mul1; // Here, return result
}
//Shows utility function to create a new tree Node
Node1* newNode(int data1){
   Node1* temp1 = new Node1;
   temp1->data1 = data1;
   temp1->left1 = temp1->right1 = NULL;
   return temp1;
}
// Driver program to test above functions
int main(){
   Node1* root1 = newNode(3);
   root1->left1 = newNode(8);
   root1->right1 = newNode(6);
   root1->left1->right1 = newNode(7);
   root1->left1->left1 = newNode(9);
   root1->left1->right1->left1 = newNode(2);
   root1->left1->right1->right1 = newNode(12);
   root1->right1->right1 = newNode(10);
   root1->right1->right1->left1 = newNode(5);
   root1->right1->right1->right1 = newNode(11);
   cout << "Final product value = "
   << sumAndMultiplyLevelData(root1) <<endl;
   return 0;
}

आउटपुट

Final product value = 270

  1. पेड़ के स्तर को खोजने के लिए कार्यक्रम जिसमें सी ++ में न्यूनतम योग है

    मान लीजिए हमारे पास एक बाइनरी ट्री है, इसकी जड़ का स्तर 1 है, इसके बच्चों का स्तर 2 है, और इसी तरह। हमें सबसे छोटा स्तर X खोजना है जैसे कि स्तर X पर नोड्स के सभी मानों का योग न्यूनतम हो। तो अगर पेड़ जैसा है - आउटपुट 2 होगा क्योंकि योग 4 - 10 =-6 है, जो न्यूनतम है। इसे हल करने के लिए, हम इन चरणों

  1. C++ में बाइनरी ट्री में अधिकतम स्तर का उत्पाद खोजें

    मान लीजिए, एक बाइनरी ट्री दिया गया है। इसमें सकारात्मक और नकारात्मक नोड्स हैं। हमें इसके प्रत्येक स्तर पर अधिकतम उत्पाद खोजना होगा। मान लीजिए कि यह पेड़ है, तो स्तर 0 का गुणनफल 4 है, स्तर 1 का गुणनफल 2 * -5 =-10 है, और स्तर 2 का गुणनफल -1 * 3 * -2 * 6 =36 है। तो यह है अधिकतम एक। इसे हल करने के ल

  1. पायथन में समान स्तरों पर पत्तियों के डेटा के योग का गुणन प्राप्त करें

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। हमें निम्नलिखित ऑपरेशन करने हैं - प्रत्येक स्तर के लिए, यदि इस स्तर पर पत्तियाँ हैं तो सभी पत्तों का योग ज्ञात कीजिए। अन्यथा इसे अनदेखा करें। सभी राशियों का गुणन ज्ञात करें और उसे वापस करें। तो, अगर इनपुट पसंद है तो आउटपुट 270 होगा। पहले दो स्तरो