मान लीजिए कि हमारे पास एक बाइनरी ट्री है, जहां प्रत्येक नोड का मान या तो 0 या 1 है। हमें वही ट्री ढूंढ़ना है जहां प्रत्येक उपट्री जिसमें 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 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,