इस ट्यूटोरियल में, हम सीखेंगे कि दिए गए मान वाले पेड़ से लीफ नोड्स को कैसे हटाया जाए।
आइए समस्या को हल करने के लिए चरणों को देखें।
-
बाइनरी ट्री के लिए एक स्ट्रक्चर नोड लिखें।
-
पेड़ के माध्यम से ट्रैवर्स (इनऑर्डर, प्रीऑर्डर, पोस्टऑर्डर) के लिए एक फ़ंक्शन लिखें और सभी डेटा प्रिंट करें।
-
स्ट्रक्चर के साथ नोड बनाकर ट्री को इनिशियलाइज़ करें।
-
x मान प्रारंभ करें।
-
दिए गए मान के साथ लीफ नोड्स को हटाने के लिए एक फ़ंक्शन लिखें। यह दो तर्क रूट नोड और k मान को स्वीकार करता है।
-
यदि रूट एक शून्य वापसी है।
-
हटाने के बाद रूट के बाएं नोड को एक नए रूट से बदलें।
-
रूट के दाहिने नोड के साथ भी।
-
यदि वर्तमान रूट नोड डेटा k के बराबर है और यह एक लीफ नोड है, तो एक नल पॉइंटर लौटाएं।
-
रूट नोड लौटाएं
-
उदाहरण
आइए कोड देखें।
#include <bits/stdc++.h>
using namespace std;
struct Node {
int data;
struct Node *left, *right;
};
struct Node* newNode(int data) {
struct Node* newNode = new Node;
newNode->data = data;
newNode->left = newNode->right = NULL;
return newNode;
}
Node* deleteLeafNodes(Node* root, int k) {
if (root == NULL) {
return nullptr;
}
root->left = deleteLeafNodes(root->left, k);
root->right = deleteLeafNodes(root->right, k);
// checking the current node data with k
if (root->data == k && root->left == NULL && root->right == NULL) {
// deleting the node
return nullptr;
}
return root;
}
void inorder(Node* root) {
if (root == NULL) {
return;
}
inorder(root->left);
cout << root->data << " ";
inorder(root->right);
}
int main(void) {
struct Node* root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(3);
root->left->right = newNode(4);
root->right->right = newNode(5);
root->right->left = newNode(4);
root->right->right->left = newNode(4);
root->right->right->right = newNode(4);
deleteLeafNodes(root, 4);
cout << "Tree: ";
inorder(root);
cout << endl;
return 0;
} आउटपुट
यदि आप उपरोक्त कोड को निष्पादित करते हैं, तो आपको निम्न परिणाम प्राप्त होंगे।
Tree: 3 2 1 3 5
निष्कर्ष
यदि ट्यूटोरियल में आपके कोई प्रश्न हैं, तो उनका टिप्पणी अनुभाग में उल्लेख करें।