কম্পিউটার টিউটোরিয়াল

মান k বিশিষ্ট লিফ নোড মুছে ফেলা C++-এ


প্রথমে একটি স্ট্রাকচার দিয়ে ট্রি নোড সংজ্ঞায়িত করা হয় যাতে থাকে ডেটা এবং লেফট ও রাইট চাইল্ড পয়েন্টার।

struct Node {
    int data;
    struct Node *leftChild, *rightChild;
};

newNode(int data) ফাংশন ইন্টিজার ভ্যালু নিয়ে নোড তৈরি করে এবং পয়েন্টার রিটার্ন করে। লেফট ও রাইট চাইল্ড নাল সেট করা হয়।

struct Node* newNode(int data) {
    struct Node* newNode = new Node;
    newNode->data = data;
    newNode->leftChild = newNode->rightChild = NULL;
    return (newNode);
}

deleteLeafNode(Node* root, int k) ফাংশন রুট নোড এবং ডিলিট করার ডেটা ভ্যালু নেয়। যদি নোড পেরেন্ট হয় তবে এর লেফট ও রাইট চাইল্ড ও মুছে ফেলা হয়। ফাংশনটি মডিফাইড রুট রিটার্ন করে।

Node* deleteLeafNode(Node* root, int k) {
    if (root == NULL)
        return nullptr;
    root->leftChild = deleteLeafNode(root->leftChild, k);
    root->rightChild = deleteLeafNode(root->rightChild, k);
    if (root->data == k && root->leftChild == NULL && root->rightChild == NULL)
        return nullptr;
    return root;
}

ডিলিশনের পর ট্রি দেখানোর জন্য inorder(Node* root) ফাংশন ইনঅর্ডার ট্রভারসাল করে।

void inorder(Node* root) {
    if (root != NULL) {
        inorder(root->leftChild);
        inorder(root->rightChild);
        cout << root->data << " ";
    }
}

উদাহরণ

#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* deleteLeafNode(Node* root, int k) {
    if (root == NULL)
        return nullptr;
    root->leftChild = deleteLeafNode(root->leftChild, k);
    root->rightChild = deleteLeafNode(root->rightChild, k);
    if (root->data == k && 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(6);
    root->leftChild = newNode(7);
    root->rightChild = newNode(7);
    root->leftChild->leftChild = newNode(5);
    root->leftChild->rightChild = newNode(3);
    root->rightChild->rightChild = newNode(7);
    deleteLeafNode(root, 7);
    cout << "Inorder traversal after deleting given leaf node: ";
    inorder(root);
    return 0;
}

আউটপুট

Inorder traversal after deleting given leaf node: 5 3 7 6

  1. BST-এ নোড ডিলিট C++-এ

  2. C++-এ লিফ নোড থেকে দূরত্ব k-এ থাকা সব নোড প্রিন্ট করা

  3. C++-এ বাইনারি সার্চ ট্রি (BST)-এ সর্বনিম্ন মান্যুক্ত নোড (Node) খুঁজে বের করা

  4. C++-এ ট্রি-এ X-এর সাথে निरপেক্ষ পার্থক্য সর্বনিম্ন হয় এমন নোড খুঁজে বের করা