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

C++ में दिए गए बाइनरी ट्री को प्रून करने का कार्यक्रम

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

C++ में दिए गए बाइनरी ट्री को प्रून करने का कार्यक्रम

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

  • एक पुनरावर्ती विधि को हल करें () परिभाषित करें, यह नोड ले जाएगा। विधि इस तरह होगी -

  • यदि नोड शून्य है, तो अशक्त लौटें

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

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

  • यदि नोड का बायां भाग शून्य है और नोड का दायां भी शून्य है और नोड मान 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 inorder(TreeNode *root){
   if(root){
      inorder(root->left);
      cout << root->val << ", ";
      inorder(root->right);
   }
}
class Solution {
   public:
   TreeNode* pruneTree(TreeNode* node) {
      if(!node)return NULL;
      node->left = pruneTree(node->left);
      node->right = pruneTree(node->right);
      if(!node->left && !node->right && !node->val){
         return NULL;
      }
      return node;
   }
};
main(){
   TreeNode *root = new TreeNode(1);
   root->left = new TreeNode(1);
   root->right = new TreeNode(0);
   root->left->left = new TreeNode(1);
   root->left->right = new TreeNode(1);
   root->right->left = new TreeNode(0);
   root->right->right = new TreeNode(1);
   root->left->left->left = new TreeNode(0);
   Solution ob;
   inorder(ob.pruneTree(root));
}

इनपुट

TreeNode *root = new TreeNode(1);
root−>left = new TreeNode(1);
root−>right = new TreeNode(0);
root−>left−>left = new TreeNode(1);
root−>left−>right = new TreeNode(1);
root−>right−>left = new TreeNode(0);
root−>right−>right = new TreeNode(1);
root−>left−>left−>left = new TreeNode(0);

आउटपुट

1, 1, 1, 1, 0, 1,

  1. जांचें कि दिया गया बाइनरी ट्री सी ++ में हीप है या नहीं

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

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

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

  1. जाँच करें कि क्या दिया गया बाइनरी ट्री C++ में SumTree है

    यहां हम देखेंगे कि कैसे जांचा जाए कि बाइनरी ट्री सम-ट्री है या नहीं। अब प्रश्न यह है कि योग वृक्ष क्या है। सम-ट्री एक बाइनरी ट्री है जहाँ एक नोड अपने बच्चों का योग मान रखेगा। पेड़ की जड़ में उसके नीचे के सभी तत्वों का योग होगा। यह सम-वृक्ष का उदाहरण है - इसे चेक करने के लिए हम एक आसान सी ट्रिक अप