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

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


প্রোগ্রামটি বাইনারি ট্রির লিফ নোডগুলো বাম থেকে ডান প্রিন্ট করবে কিন্তু চ্যালেঞ্জ হলো শুধু একটি স্ট্যাক ব্যবহার করা।

push() ফাংশন মাধ্যমে বাইনারি ট্রির নোডগুলো ইনসার্ট করা হবে এবং pop() অপারেশন মাধ্যমে লিফ নোডগুলো ডিসপ্লে করা হবে।

লিফ নোড হলো শেষ নোডগুলো যাদের লেফট এবং রাইট পয়েন্টার NULL যা বোঝায় সেই নির্দিষ্ট নোড কোনো প্যারেন্ট নোড নয়।

উদাহরণ

ইনপুট: 12 21 32 41 59 33 70 আউটপুট: 41 59 33 70

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

স্ট্যাক হলো একটি ডেটা স্ট্রাকচার যা LIFO স্ট্রাকচারে টপ পয়েন্টার শেষ ইনসার্ট করা এলিমেন্টকে পয়েন্ট করে তাই লিফ নোডগুলো স্ট্যাকে শেষে ইনসার্ট হবে এবং স্ট্যাক স্ট্রাকচার অনুযায়ী অন্য যেকোনো নোডের আগে সেগুলো পপ আউট বা রিমুভ হবে।

নিচের কোডটি দেওয়া অ্যালগরিদমের C++ STL ব্যবহার করে ইমপ্লিমেন্টেশন দেখাচ্ছে।

অ্যালগরিদম

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 val
      Declare node variable of node using malloc
      Set node->data = val
      Set node->left = node->right = NULL
      return node
   step 3 → Declare Function void leaf(Node *ptr)
      create vector stack<Node*>stck
      Loop While 1
      IF ptr
         Stck.push(ptr)
         Ptr = ptr->left
      Else
         IF (stck.empty())
            Break
         Else
            IF (stck.top()->right == NULL)
               Set ptr = stck.top()
               Set stck.pop()
               IF ptr->left = NULL
                  Print ptr->data
            End
            Loop While ptr == stck.top()->right
               Set ptr = stck.top()
               Call stck.pop()
               IF stck.empty()
                  Break
               End
               IF !stck.empty()
                  Set ptr = tck.top()->right
               Else
                  Set ptr = NULL
               EndIF
            End
         End
      End
   Step 4→ In main()
      Call New passing value user want to insert as Node* root = New(12)
      Call leaf(root)
STOP

উদাহরণ

#include <bits/stdc++.h> using namespace std; // Structure of a node struct Node {    Node* left;    Node* right;    int data; }; //Function to create a new node Node* New(int val) {    Node* node = new Node();    node->left = node->right = NULL;    node->data = val;    return node; } // leaf node using stack void leaf(Node* ptr) {    // stack that will store nodes    stack<Node*> stck;    while (1) {       if (ptr) {          stck.push(ptr);          ptr = ptr->left;       } else {          if (stck.empty())             break;          else {             if (stck.top()->right == NULL) {                ptr = stck.top();                stck.pop();                // Print the leaf node                if (ptr->left == NULL)                   printf("%d ", ptr->data);             }             while (ptr == stck.top()->right) {                ptr = stck.top();                stck.pop();                if (stck.empty())                   break;             }             if (!stck.empty())                ptr = stck.top()->right;             else                ptr = NULL;          }       }    } } int main() {    printf("leaf nodes at end level are : ");    Node* root = New(12);    root->left = New(21);    root->right = New(32);    root->left->left = New(41);    root->left->right = New(59);    root->right->left = New(33);    root->right->right = New(70);    leaf(root);    return 0; }

আউটপুট

যদি আমরা উপরের প্রোগ্রামটি রান করি তবে এটি নিচের আউটপুট জেনারেট করবে।

leaf nodes at end level are : 41 59 33 70

  1. C++-এ n-এরি ট্রির সব লিফ নোড DFS দিয়ে প্রিন্ট করা

  2. C++-এ লিফ নোড থেকে দূরত্ব k-এ থাকা সব নোড প্রিন্ট করা

  3. সি++ প্রোগ্রাম: বাইনারি ট্রি (Binary Tree)-এর বিজোড় লেভেল (Odd Level)-এ থাকা নোডগুলো প্রিন্ট করা

  4. C++ প্রোগ্রামিং-এ বাইনারি ট্রি নোডগুলো প্রিন্ট করা যেন তারা লিফ নোড হয়