मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें यूनी-वैल्यू सबट्री की संख्या गिननी होगी। यहां यूनी-वैल्यू सबट्री इंगित करता है कि सबट्री के सभी नोड्स का मान समान है।
तो, अगर इनपुट रूट की तरह है =[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