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