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

C++ में दिए गए मान के साथ पत्ते हटाएं

मान लीजिए कि हमारे पास एक बाइनरी ट्री और एक पूर्णांक लक्ष्य है, हमें मूल्य लक्ष्य वाले सभी लीफ नोड्स को हटाना होगा। हमें यह ध्यान रखना होगा कि एक बार जब हम एक मूल्य लक्ष्य के साथ एक लीफ नोड को हटा देते हैं, यदि यह मूल नोड एक लीफ नोड बन जाता है और इसका मूल्य लक्ष्य होता है, तो इसे भी हटा दिया जाना चाहिए (हमें ऐसा तब तक जारी रखने की आवश्यकता है जब तक हम नहीं कर सकते)। तो अगर पेड़ नीचे जैसा है, और लक्ष्य 2 है, तो अंतिम पेड़ पिछले वाले जैसा होगा -

C++ में दिए गए मान के साथ पत्ते हटाएं

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

  • remLeaf() नामक एक पुनरावर्ती विधि को परिभाषित करें, यह रूट और लक्ष्य लेगा

  • यदि रूट शून्य है, तो शून्य वापस लौटें

  • बायां :=remLeaf (रूट के बाईं ओर, लक्ष्य)

  • दाएँ:=remLeaf (रूट के दाईं ओर, लक्ष्य)

  • यदि बायां शून्य है और दायां शून्य है और रूट का मान लक्ष्य के समान है, तो शून्य वापस करें

  • रूट के बाएँ :=बाएँ

  • जड़ का दाहिना :=दाएँ

  • वापसी जड़

उदाहरण (C++)

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

#include <bits/stdc++.h>
using namespace std;
class TreeNode{
   public:
      int val;
      TreeNode *left, *right;
      TreeNode(int data){
         val = data;
         left = 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;
}
void tree_level_trav(TreeNode*root){
   if (root == NULL) return;
   cout << "[";
   queue<TreeNode *> q;
   TreeNode *curr;
   q.push(root);
   q.push(NULL);
   while (q.size() > 1) {
      curr = q.front();
      q.pop();
      if (curr == NULL){
         q.push(NULL);
      } else {
         if(curr->left)
            q.push(curr->left);
         if(curr->right)
            q.push(curr->right);
         if(curr->val == 0 || curr == NULL){
            cout << "null" << ", ";
            } else {
               cout << curr->val << ", ";
            }
         }
   }
   cout << "]"<<endl;
}
class Solution {
   public:
      TreeNode* removeLeafNodes(TreeNode* root, int target) {
         if(!root || root->val == 0) return NULL;
         TreeNode* left = removeLeafNodes(root->left, target);
         TreeNode* right = removeLeafNodes(root->right, target);
         if(!left && !right && root->val == target){
            return NULL;
         }
         root->left = left;
         root->right = right;
         return root;
      }
};
main() {
   vector<int> v1 = {1,2,3,2,NULL,2,4};
   TreeNode *root = make_tree(v1);
   Solution ob;
   tree_level_trav(ob.removeLeafNodes(root, 2));
}

इनपुट

[1,2,3,2,null,2,4]
2

आउटपुट

[1, 3, 4, ]

  1. C++ में दी गई शर्तों के साथ ग्रिड में 8 नंबर भरें

    मान लीजिए कि हम दी गई आकृति के आठ वृत्तों में 1, 2, 3, 4, 5, 6, 7, 8 को इस प्रकार रखना चाहते हैं कि कोई भी संख्या उस संख्या के निकट न हो जो क्रम में उसके बगल में हो। तो, अगर इनपुट पसंद है 0 - 1 - 1 0 - 1 - 1 - 1 - 1 0 - 1 - 1 0 तो आउटपुट होगा इसे हल करने के लिए, हम

  1. C++ में दिए गए n क्रमित शीर्षों वाले बहुभुज का क्षेत्रफल

    इस प्रोग्राम में हमें एक बहुभुज का क्षेत्रफल ज्ञात करना होता है। इस बहुभुज के शीर्षों के निर्देशांक दिए गए हैं। इससे पहले कि हम आगे बढ़ें, पुरानी अवधारणाओं को बेहतर ढंग से समझने के लिए आगे बढ़ने दें। क्षेत्र किसी भी द्वि-आयामी आकृति की सीमा का मात्रात्मक प्रतिनिधित्व है। बहुभुज दी गई भुजाओं वाली ए

  1. फैब्स () सी ++ में

    सी या सी ++ लाइब्रेरी फ़ंक्शन डबल फैब्स (डबल एक्स) एक्स का पूर्ण मान देता है। x− यह फ्लोटिंग पॉइंट वैल्यू है। यह फ़ंक्शन x का निरपेक्ष मान लौटाता है। निम्नलिखित fabs() फ़ंक्शन के लिए घोषणा है। double fabs(double x) निम्न उदाहरण fabs() फ़ंक्शन के उपयोग को दर्शाता है। उदाहरण #include <iostream>