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

সি প্রোগ্রামিং-এ পারফেক্ট বাইনারি ট্রির মিডল লেভেল প্রিন্ট করা (হাইট বের না করে)


প্রোগ্রামটি একটি বাইনারি ট্রির মিডল লেভেল (middle level) প্রিন্ট করবে। উদাহরণস্বরূপ, ৪ লেভেল থাকলে লেভেল ২ প্রিন্ট করবে — কিন্তু হাইট বের না করে।

পারফেক্ট বাইনারি ট্রি (Perfect Binary Tree): যেই ট্রিতে সব ইন্টিয়র নোডের দুটি চাইল্ড থাকে এবং সব লিফ নোড একই লেভেল/ডেপথে থাকে।

সি প্রোগ্রামিং-এ পারফেক্ট বাইনারি ট্রির মিডল লেভেল প্রিন্ট করা (হাইট বের না করে)

  • ইন্টিয়র নোড ২১ এবং ৩২ — দুটোরই চাইল্ড আছে।
  • লিফ নোড ৪১, ৫৯, ৩৩, ৭০ — সবই একই লেভেলে।

উদাহরণ

Input: 12 21 32 41 59 33 70
Output: 21 32

অ্যাপ্রোচ: লিংকড লিস্টের মিডল এলিমেন্ট বের করার মতোই — লেফট এবং রাইট পয়েন্টার NULL কিনা চেক করে রিকার্সিভ কল দিয়ে মিডল লেভেল বের করা যায়।

অ্যালগরিদম

START
Step 1: Create node structure with key, left, right
Step 2: Function New(int value) to create node
Step 3: Function middle(Node* a, Node* b)
    IF a==NULL || b==NULL RETURN
    IF (b->left==NULL && b->right==NULL)
        PRINT a->key; RETURN
    CALL middle(a->left, b->left->left)
    CALL middle(a->right, b->left->left)
Step 4: Function mid_level(Node* node)
    CALL middle(node, node)
Step 5: In main()
    Create tree, call mid_level(root)
STOP

সি প্রোগ্রাম

#include <stdio.h>
#include <stdlib.h>

struct Node {
    int key;
    struct Node* left, *right;
};

struct Node* New(int value) {
    struct Node* temp = (struct Node*)malloc(sizeof(struct Node));
    temp->key = value;
    temp->left = temp->right = NULL;
    return temp;
}

void middle(struct Node* a, struct Node* b) {
    if (a == NULL || b == NULL) return;
    if ((b->left == NULL) && (b->right == NULL)) {
        printf("%d ", a->key);
        return;
    }
    middle(a->left, b->left->left);
    middle(a->right, b->left->left);
}

void mid_level(struct Node* node) {
    middle(node, node);
}

int main() {
    printf("middle level nodes are: ");
    struct Node* n1 = New(13);
    struct Node* n2 = New(21);
    struct Node* n3 = New(44);
    struct Node* n4 = New(98);
    struct Node* n5 = New(57);
    struct Node* n6 = New(61);
    struct Node* n7 = New(70);
    n2->left = n4; n2->right = n5;
    n3->left = n6; n3->right = n7;
    n1->left = n2; n1->right = n3;
    mid_level(n1);
    return 0;
}

আউটপুট

middle level nodes are: 21 44

  1. C++-এ বাইনারি ট্রির সব ফুল নোড প্রিন্ট করা

  2. C++-এ বাইনারি ট্রির সব ইন্টারনাল নোড প্রিন্ট করা

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

  4. C++ প্রোগ্রামিং-এ বাইনারি ট্রির সব নোডের লেভেল প্রিন্ট করা