आइए पहले उस संरचना को परिभाषित करें जो एक ट्री नोड का प्रतिनिधित्व करेगी जिसमें डेटा और उसके बाएँ और दाएँ नोड बच्चे शामिल हैं। यदि यह बनाया जाने वाला पहला नोड है तो यह एक रूट नोड है अन्यथा एक चाइल्ड नोड है।
struct Node { int data; struct Node *leftChild, *rightChild; };
इसके बाद हम अपना नया नोड (इंट डेटा) फ़ंक्शन बनाते हैं जो एक इंट वैल्यू लेता है और इसे नोड के डेटा सदस्य को असाइन करता है। फ़ंक्शन पॉइंटर को बनाए गए स्ट्रक्चर नोड पर लौटाता है। साथ ही नव निर्मित नोड के बाएँ और दाएँ बच्चे को शून्य पर सेट किया गया है।
struct Node* newNode(int data){ struct Node* newNode = new Node; newNode->data = data; newNode->leftChild = newNode->rightChild = NULL; return (newNode); }
अब हम अपना डिलीटनोड (नोड * रूट, इंट एक्स) फंक्शन बनाते हैं जो रूट नोड और नोड के डेटा वैल्यू को डिलीट करने के लिए लेता है। यदि दिया गया नोड पैरेंट नोड है तो यह अपने बाएँ और दाएँ बच्चे को भी हटा देता है। फ़ंक्शन दिए गए नोड को हटाने के बाद संशोधित रूट नोड लौटाता है।
Node* deleteLeafNode(Node* root, int x){ if (root == NULL) return nullptr; root->leftChild = deleteLeafNode(root->leftChild, x); root->rightChild = deleteLeafNode(root->rightChild, x); if (root->data == x && root->leftChild == NULL && root->rightChild == NULL) return nullptr; return root; }
अंत में हटाने के बाद पेड़ को हटाने के लिए हमारे पास एक फ़ंक्शन इनऑर्डर (नोड * रूट) है जो पेड़ को इनऑर्डर फ़ंक्शन में पार करता है।
void inorder(Node* root){ if (root != NULL){ inorder(root->leftChild); inorder(root->rightChild); cout << root->data << " "; } }
उदाहरण
आइए हम x के बराबर मान वाले लीफ नोड्स को हटाने के निम्नलिखित कार्यान्वयन को देखें
#include <iostream> using namespace std; struct Node { int data; struct Node *leftChild, *rightChild; }; struct Node* newNode(int data){ struct Node* newNode = new Node; newNode->data = data; newNode->leftChild = newNode->rightChild = NULL; return (newNode); } Node* deleteNode(Node* root, int x){ if (root == NULL) return nullptr; root->leftChild = deleteNode(root->leftChild, x); root->rightChild = deleteNode(root->rightChild, x); if (root->data == x && root->leftChild == NULL && root->rightChild == NULL) return nullptr; return root; } void inorder(Node* root){ if (root != NULL){ inorder(root->leftChild); inorder(root->rightChild); cout << root->data << " "; } } int main(void){ struct Node* root = newNode(4); root->leftChild = newNode(2); root->rightChild = newNode(12); root->leftChild->leftChild = newNode(3); root->leftChild->rightChild = newNode(5); root->rightChild->rightChild = newNode(9); deleteNode(root, 3); cout << "Inorder traversal after deletion : "; inorder(root); return 0; }
आउटपुट
उपरोक्त कोड निम्न आउटपुट उत्पन्न करेगा -
Inorder traversal after deletion : 5 2 9 12 4