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

सी ++ में यूनीवैल्यू सबट्री की गणना करें

मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें यूनी-वैल्यू सबट्री की संख्या गिननी होगी। यहां यूनी-वैल्यू सबट्री इंगित करता है कि सबट्री के सभी नोड्स का मान समान है।

तो, अगर इनपुट रूट की तरह है =[5,1,5,5,5,5,नल,5],

सी ++ में यूनीवैल्यू सबट्री की गणना करें

तो आउटपुट 4

. होगा

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक फ़ंक्शन हल करें () को परिभाषित करें, यह नोड लेगा,

  • यदि नोड खाली है, तो -

    • सही लौटें

  • बाएं:=हल करें (नोड के बाएं)

  • दाएं:=हल करें (नोड के दाएं)

  • अगर बायां झूठा है या दायां झूठा है, तो -

    • झूठी वापसी

  • यदि नोड का बायां भाग मौजूद है और नोड का वैल नोड के बाईं ओर के मान के बराबर नहीं है, तो -

    • झूठी वापसी

  • यदि नोड का अधिकार मौजूद है और नोड का मान नोड के अधिकार के मान के बराबर नहीं है, तो -

    • झूठी वापसी

  • (रिटर्न 1 से बढ़ाएं)

  • सही लौटें

  • मुख्य विधि से निम्न कार्य करें -

  • रिट:=0

  • हल (रूट)

  • वापसी रिट

उदाहरण

आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;
class TreeNode{
public:
   int val;
   TreeNode *left, *right;
   TreeNode(int data){
      val = data;
      left = NULL;
      right = NULL;
   }
};
void insert(TreeNode **root, int val){
   queue<TreeNode*> q;
   q.push(*root);
   while(q.size()){
      TreeNode *temp = q.front();
      q.pop();
      if(!temp->left){
         if(val != NULL)
            temp->left = new TreeNode(val);
         else
            temp->left = new TreeNode(0);
         return;
      }
      else{
         q.push(temp->left);
      }
      if(!temp->right){
         if(val != NULL)
            temp->right = new TreeNode(val);
         else
            temp->right = new TreeNode(0);
         return;
      }
      else{
         q.push(temp->right);
      }
   }
}
TreeNode *make_tree(vector<int< v){
   TreeNode *root = new TreeNode(v[0]);
   for(int i = 1; i<v.size(); i++){
      insert(&root, v[i]);
   }
   return root;
}
class Solution {
public:
   int ret;
   bool solve(TreeNode* node){
      if (!node || node->val == 0)
         return true;
      bool left = solve(node->left);
      bool right = solve(node->right);
      if (!left || !right)
         return false;
      if (node->left && node->left->val != 0 && node->val != node->left->val)
         return false;
      if (node->right && node->right->val != 0 && node->val != node->right->val)
         return false;
      ret++;
      return true;
   }
   int countUnivalSubtrees(TreeNode* root){
      ret = 0;
      solve(root);
      return ret;
   }
};
main(){
   Solution ob;
   vector<int< v = {5,1,5,5,5,NULL,5};
   TreeNode *root = make_tree(v);
   cout << (ob.countUnivalSubtrees(root));
}

इनपुट

{5,1,5,5,5,NULL,5}

आउटपुट

4

  1. C++ में समतल में समांतर चतुर्भुजों की संख्या

    हमें एक समतल दिया गया है जिसमें समांतर चतुर्भुज बनाने वाले बिंदु हैं और कार्य समांतर चतुर्भुजों की गणना करना है जो दिए गए बिंदुओं का उपयोग करके बनाए जा सकते हैं। समांतर चतुर्भुज में एक चतुर्भुज के विपरीत पक्ष समानांतर होते हैं और इसलिए विपरीत कोण बराबर होते हैं। इनपुट - int a[] = {0, 2, 5, 5, 2, 5,

  1. C++ में डुप्लीकेट सबट्री खोजें

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। हमें सभी डुप्लिकेट सबट्री खोजने होंगे। इसलिए प्रत्येक प्रकार के डुप्लिकेट सबट्री के लिए, हमें उनमें से किसी एक का रूट नोड वापस करना होगा। तो मान लीजिए हमारे पास − . जैसा एक पेड़ है डुप्लीकेट सबट्री हैं - इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  1. C++ में सिंगल वैल्यूड सबट्री की संख्या ज्ञात करें

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