ভূমিকা
একটি বাইনারি ট্রি দেওয়া থাকলে, প্রতিটি লেভেলের বামপাশের (leftmost) এবং ডানপাশের (rightmost) নোডগুলো প্রিন্ট করতে হবে। এগুলোকে কর্ণার (corner) নোডও বলা হয়।
উদাহরণ
ইনপুট ট্রি:
106
/ \
20 320
/ \ / \
100 21 61 52
আউটপুট: 106 20 320 100 52
এলগরিদম (লেভেল অর্ডার ট্রাভার্সাল)
void print(node* root) শুরু যদি root == NULL: রিটার্ন queueque, vector ans que.push(root) যতক্ষণ que খালি নয়: n = que.size() i = 0 থেকে n-1 পর্যন্ত: temp = que.front(), que.pop() যদি i == 0 বা i == n-1: ans.push_back(temp->data) যদি temp->left: que.push(temp->left) যদি temp->right: que.push(temp->right) ans ভেক্টরের সব উপাদান প্রিন্ট করুন শেষ
C++ প্রোগ্রাম উদাহরণ
#includeusing namespace std; struct node { int data; struct node *left, *right; }; struct node* newNode(int val) { node* temp = new node; temp->data = val; temp->left = temp->right = NULL; return temp; } void print(node* root) { if (root == NULL) return; queue que; que.push(root); vector ans; while (!que.empty()) { int n = que.size(); for (int i = 0; i < n; i++) { node* temp = que.front(); que.pop(); if (i == 0 || i == n - 1) ans.push_back(temp->data); if (temp->left) que.push(temp->left); if (temp->right) que.push(temp->right); } } for (auto i : ans) cout << i << " "; } int main() { node* root = newNode(106); root->left = newNode(20); root->right = newNode(320); root->left->left = newNode(100); root->left->right = newNode(21); root->right->left = newNode(61); root->right->right = newNode(52); print(root); return 0; }
আউটপুট
106 20 320 100 52