কাজটি হল প্রদত্ত বাইনারি গাছের ডান নোডগুলি প্রিন্ট করা। প্রথমত ব্যবহারকারী একটি বাইনারি ট্রি তৈরি করার জন্য ডেটা সন্নিবেশ করবে এবং গাছের ডানদিকের দৃশ্য প্রিন্ট করবে।
উপরের চিত্রটি এই নোডগুলির মধ্যে 10, 42, 93, 14, 35, 96, 57 এবং 88 নোডগুলির সাথে তৈরি করা বাইনারি ট্রিটি প্রদর্শন করে যা একটি গাছের ডানদিকে থাকে যা বেছে নেওয়া হয় এবং পর্দায় প্রদর্শিত হয়। উদাহরণস্বরূপ, 10, 93, 57 এবং 88 হল একটি বাইনারি গাছের ডানদিকের নোড।
উদাহরণ
Input : 10 42 93 14 35 96 57 88 Output : 10 93 57 88
প্রতিটি নোডের সাথে যুক্ত দুটি পয়েন্টার রয়েছে যেমন বাম এবং ডান। এই প্রশ্ন অনুযায়ী, প্রোগ্রাম শুধুমাত্র ডান নোড অতিক্রম করতে হবে। সুতরাং, নোডের বাম সন্তান নিয়ে মাথা ঘামানোর দরকার নেই।
রাইট ভিউ সেই সমস্ত নোডগুলিকে সঞ্চয় করে যা তাদের স্তরের শেষ নোড। সুতরাং, আমরা নোডগুলিকে সংরক্ষণ এবং অ্যাক্সেস করার জন্য এমনভাবে রিকার্সিভ পদ্ধতি ব্যবহার করতে পারি যাতে ডান সাবট্রি বাম সাবট্রির আগে অতিক্রম করা হয়। যখনই প্রোগ্রামটি নোড সনাক্ত করে যার স্তরটি পূর্ববর্তী নোডের চেয়ে আগের নোডের স্তরের চেয়ে বেশি তা প্রদর্শিত হয় কারণ এটি তার স্তরের শেষ নোড হবে৷
নিচের কোডটি প্রদত্ত অ্যালগরিদমের সি বাস্তবায়ন দেখায়
অ্যালগরিদম
START Step 1 -> create node variable of type structure Declare int data Declare pointer of type node using *left, *right Step 2 -> create function for inserting node with parameter as item Declare temp variable of node using malloc Set temp->data = item Set temp->left = temp->right = NULL return temp step 3 -> Declare Function void right_view(struct node *root, int level, int *end_level) IF root = NULL Return IF *end_level < level Print root->data Set *end_level = level Call right_view(root->right, level+1, end_level) Call right_view(root->left, level+1, end_level) Step 4 -> Declare Function void right(struct node *root) Set int level = 0 Call right_view(root, 1, &level) Step 5 -> In Main() Pass the values for the tree nodes using struct node *root = New(10) 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