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

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


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

तो, अगर इनपुट पसंद है

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

तो आउटपुट 4 होगा क्योंकि 3 को छोड़कर सभी नोड्स, यह मानदंडों को पूरा करता है।

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

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

  • यदि नोड शून्य नहीं है, तो -

    • वापसी 0

  • l :=dfs (नोड के बाएं)

  • r :=dfs (नोड के दाएं)

  • यदि नोड का मान>=अधिकतम l और r, तो −

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

  • x :=नोड, l और r के अधिकतम मान

  • वापसी x

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

  • रिट:=0

  • dfs(रूट)

  • वापसी रिट

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class TreeNode {
   public:
   int val;
   TreeNode *left, *right;
   TreeNode(int data) {
      val = data;
      left = NULL;
      right = NULL;
   }
};
class Solution {
   public:
   int ret;
   int dfs(TreeNode* node){
      if(!node)
         return 0;
      int l = dfs(node->left);
      int r = dfs(node->right);
      if(node->val >= max(l, r)) {
         ret++;
      }
      int x = max({node->val, l, r});
      return x;
   }
   int solve(TreeNode* root) {
      ret = 0;
      dfs(root);
      return ret;
   }
};
main(){
   Solution ob;
   TreeNode *root = new TreeNode(7);
   root->left = new TreeNode(4);
   root->right = new TreeNode(3);
   root->right->left = new TreeNode(7);
   root->right->right = new TreeNode(5);
   cout << (ob.solve(root));
}

इनपुट

TreeNode *root = new TreeNode(7);
root->left = new TreeNode(4);
root->right = new TreeNode(3);
root->right->left = new TreeNode(7);
root->right->right = new TreeNode(5);

आउटपुट

4

  1. C++ में दूषित बाइनरी ट्री में तत्वों का पता लगाएं

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। उस पेड़ के नियम इस प्रकार हैं - root.val ==0 अगर treeNode.val x है और treeNode.left शून्य नहीं है, तो treeNode.left.val =2 * x + 1 अगर treeNode.val x है और treeNode.right शून्य नहीं है, तो treeNode.right.val =2 * x + 2 अब जैसा कि बाइनरी ट्री दूषि

  1. C++ में एक बाइनरी ट्री की पूर्णता की जाँच करें

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। हमें यह जांचना है कि ट्री पूर्ण बाइनरी ट्री है या नहीं। स्तर n के एक पूर्ण बाइनरी ट्री में n-1 पूर्ण स्तर होते हैं, और स्तर n पर सभी नोड्स बाईं ओर से भरे जाते हैं। तो अगर इनपुट ट्री जैसा है - तब आउटपुट सही होगा, क्योंकि यह पूर्ण बाइनरी ट्री है। इसे हल

  1. C++ में बाइनरी ट्री प्रूनिंग

    मान लीजिए कि हमारे पास एक बाइनरी ट्री का हेड नोड रूट है, जहां अतिरिक्त रूप से प्रत्येक नोड का मान या तो 0 या 1 है। हमें वही ट्री ढूंढना है जहां प्रत्येक सबट्री जिसमें 1 नहीं है, को हटा दिया गया है। तो अगर पेड़ जैसा है - इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक पुनरावर्ती विधि को