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

সি প্রোগ্রামিং-এ বাইনারি ট্রির রাইট ভিউ (Right View) প্রিন্ট করা


একটি বাইনারি ট্রি দেওয়া থাকলে, এর ডান পাশের নোডগুলো (Right View) প্রিন্ট করতে হবে। প্রথমে ব্যবহারকারী ডেটা দিয়ে বাইনারি ট্রি তৈরি করবে, তারপর রাইট ভিউ প্রিন্ট করা হবে।

সি প্রোগ্রামিং-এ বাইনারি ট্রির রাইট ভিউ (Right View) প্রিন্ট করা

উপরের ডায়াগ্রামে ১০, ৪২, ৯৩, ১৪, ৩৫, ৯৬, ৫৭, ৮৮ নোড দিয়ে বাইনারি ট্রি বানানো হয়েছে। এদের মধ্যে ডান পাশে থাকা নোডগুলো: ১০, ৯৩, ৫৭, ৮৮।

উদাহরণ

Input: 10 42 93 14 35 96 57 88
Output: 10 93 57 88

প্রতিটি নোডের দুটি পয়েন্টার থাকে: লেফট এবং রাইট। এই সমস্যায় শুধু রাইট নোডগুলো ট্রাভার্স করলেই চলে।

রাইট ভিউতে সেই নোডগুলো থাকে যারা তাদের লেভেলের (level) লাস্ট নোড। রিকার্সিভ পদ্ধতিতে রাইট সাবট্রি আগে ট্রাভার্স করলে, যখন কোনো নোডের লেভেল আগের নোডের লেভেলের চেয়ে বেশি হয়, সেটি প্রিন্ট করা হয়।

অ্যালগরিদম

START
Step 1: Create node structure with data, left, right pointers
Step 2: Function New(int item) to create new node
Step 3: Function right_view(node* root, int level, int* end_level)
    IF root == NULL RETURN
    IF *end_level < level
        PRINT root->data
        *end_level = level
    CALL right_view(root->right, level+1, end_level)
    CALL right_view(root->left, level+1, end_level)
Step 4: Function right(node* root)
    level = 0
    CALL right_view(root, 1, &level)
Step 5: In main()
    Create tree nodes, call right(root)
STOP

সি প্রোগ্রাম

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

struct node {
    int data;
    struct node *left, *right;
};

struct node* New(int item) {
    struct node* temp = (struct node*)malloc(sizeof(struct node));
    temp->data = item;
    temp->left = temp->right = NULL;
    return temp;
}

void right_view(struct node* root, int level, int* end_level) {
    if (root == NULL) return;
    if (*end_level < level) {
        printf("%d\t", root->data);
        *end_level = level;
    }
    right_view(root->right, level + 1, end_level);
    right_view(root->left, level + 1, end_level);
}

void right(struct node* root) {
    int level = 0;
    right_view(root, 1, &level);
}

int main() {
    printf("right view of a binary tree is: ");
    struct node* root = New(10);
    root->left = New(42);
    root->right = New(93);
    root->left->left = New(14);
    root->left->right = New(35);
    root->right->left = New(96);
    root->right->right = New(57);
    root->right->left->right = New(88);
    right(root);
    return 0;
}

আউটপুট

right view of a binary tree is: 10 93 57 88

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

  2. C++-এ একটি স্ট্যাক ব্যবহার করে বাইনারি ট্রির লিফ নোডগুলো বাম থেকে ডান প্রিন্ট করা

  3. Python দিয়ে বাইনারি ট্রিতে একটি নোডের ডানে অবস্থিত নোড বের করার প্রোগ্রাম

  4. পাইথনে বাইনারি ট্রির দ্বিতীয় গভীরতম নোড নির্ণয়