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

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


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

इसलिए, यदि इनपुट है root = [5,1,5,5,5,null,5],

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

तो आउटपुट 4 होगा।

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

  • एक फ़ंक्शन solve() परिभाषित करें, जो नोड को पैरामीटर के रूप में लेगा,

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

    • true लौटाएं

  • left := solve(node का बायाँ भाग)

  • right := solve(node का दायाँ भाग)

  • यदि left false है या right false है, तो -

    • false लौटाएं

  • यदि node का बायाँ भाग मौजूद है और node का मान node के बाएँ भाग के मान के बराबर नहीं है, तो -

    • false लौटाएं

  • यदि node का दायाँ भाग मौजूद है और node का मान node के दाएँ भाग के मान के बराबर नहीं है, तो -

    • false लौटाएं

  • (ret को 1 से बढ़ाएं)

  • true लौटाएं

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

  • ret := 0

  • solve(root)

  • ret लौटाएं

उदाहरण

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

#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++ में तल में समानांतर चतुर्भुजों की गणना C++ में तल में समानांतर चतुर्भुजों की गणना

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

  1. C++ में डुप्लिकेट उपट्री ढूंढना C++ में डुप्लिकेट उपट्री ढूंढना

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

  1. C++ में एकल-मान वाले सबट्री की गिनती ढूंढना C++ में एकल-मान वाले सबट्री की गिनती ढूंढना

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