এই টিউটোরিয়ালে আমরা শিখব কিভাবে একটি ট্রি থেকে দেওয়া মান দিয়ে লিফ নোড ডিলিট করা যায়।
সমস্যা সমাধানের ধাপগুলো:
বাইনারি ট্রির জন্য একটি struct Node লিখুন।
ট্রি ট্রাভার্স (ইনঅর্ডার, প্রिअর্ডার, পোস্টঅর্ডার) করে সব ডেটা প্রিন্ট করার ফাংশন লিখুন।
struct দিয়ে নোড তৈরি করে ট্রি ইনিশিয়ালাইজ করুন।
k মান ইনিশিয়ালাইজ করুন।
দেওয়া মান দিয়ে লিফ নোড ডিলিট করার ফাংশন লিখুন। এতে দুটি আর্গুমেন্ট থাকে রুট নোড এবং 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
উপসংহার
টিউটোরিয়াল সম্পর্কে কোনো প্রশ্ন থাকলে কমেন্ট সেকশনে জানান।