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

C++-এ মিন হিপে নির্দিষ্ট মান x থেকে ছোট সব নোড প্রিন্ট করা

এই সমস্যায় একটি মিন হিপ এবং একটি মান x দেওয়া আছে। আমাদের x থেকে ছোট সব নোড প্রিন্ট করতে হবে।

মিন হিপ হলো একটি বিশেষ ধরনের বাইনারি ট্রি যেখানে প্রতিটি নোডের মান তার চাইল্ড নোডের মান থেকে ছোট।

উদাহরণ

C++-এ মিন হিপে নির্দিষ্ট মান x থেকে ছোট সব নোড প্রিন্ট করা

X = 45

আউটপুট - 2 4 7 10 17 22 33 34

এই সমস্যাটি সমাধানের জন্য পুরো মিন হিপের প্রি-অর্ডার ট্রাভার্সাল করতে হবে এবং শুধু সেই মানগুলো প্রিন্ট করতে হবে যেগুলো দেওয়া মান X থেকে ছোট। যদি কোনো নোডের মান X থেকে বড় হয়, তবে সেটির চাইল্ড নোড ট্রাভার্স করব না কারণ তাদের মানও X থেকে বড় হবে। প্রি-অর্ডার ট্রাভার্সালের জন্য রিকার্শন ব্যবহার করা হবে।

বাস্তবায়ন

#include <iostream> 
using namespace std; 

class MinHeap { 
    int* harr; 
    int capacity; 
    int heap_size; 
public: 
    MinHeap(int capacity); 
    void Heapify(int); 
    int parent(int i) { return (i - 1) / 2; } 
    int left(int i) { return (2 * i + 1); } 
    int right(int i) { return (2 * i + 2); } 
    void insert(int k); 
    void printSmallerNodes(int k, int pos); 
}; 

void MinHeap::printSmallerNodes(int x, int pos = 0) { 
    if (pos >= heap_size) 
        return; 
    if (harr[pos] >= x) { 
        return; 
    } 
    cout << harr[pos] << " "; 
    printSmallerNodes(x, left(pos)); 
    printSmallerNodes(x, right(pos)); 
} 

MinHeap::MinHeap(int cap) { 
    heap_size = 0; 
    capacity = cap; 
    harr = new int[cap]; 
} 

void MinHeap::insert(int k) { 
    if (heap_size == capacity) { 
        cout << "\nOverflow! Size Full\n"; 
        return; 
    } 
    heap_size++; 
    int i = heap_size - 1; 
    harr[i] = k; 
    while (i != 0 && harr[parent(i)] > harr[i]) { 
        swap(harr[i], harr[parent(i)]); 
        i = parent(i); 
    } 
} 

void MinHeap::Heapify(int i) { 
    int l = left(i); 
    int r = right(i); 
    int smallest = i; 
    if (l < heap_size && harr[l] < harr[i]) 
        smallest = l; 
    if (r < heap_size && harr[r] < harr[smallest]) 
        smallest = r; 
    if (smallest != i) { 
        swap(harr[i], harr[smallest]); 
        Heapify(smallest); 
    } 
} 

int main() { 
    MinHeap h(50); 
    h.insert(2); 
    h.insert(4); 
    h.insert(7); 
    h.insert(34); 
    h.insert(52); 
    h.insert(33); 
    h.insert(10); 
    h.insert(51); 
    h.insert(75); 
    h.insert(17); 
    h.insert(22); 
    int x = 45; 
    cout << "All nodes with value smaller than " << x << " are\n"; 
    h.printSmallerNodes(x); 
    return 0; 
}

আউটপুট

All nodes with a value smaller than 45 are
2 4 34 17 22 7 33 10
  1. C++-এ একটি নির্দিষ্ট নোড থেকে দূরত্ব k-এ থাকা সব নোড প্রিন্ট করা

  2. C++-এ বাইনারি ট্রিতে K লিফ বিশিষ্ট সব নোড প্রিন্ট করা

  3. C++-এ মিন হিপে নির্দিষ্ট মান x থেকে ছোট সব নোড প্রিন্ট করা

  4. বিজোড় এবং জোড় সংখ্যক নোড वाले ট্রি লেভেল প্রিন্ট করা C++-তে