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

C++ প্রোগ্রামিং-এ রিকার্শন ছাড়া রুট-টু-লিফ পথ প্রিন্ট করা


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

আমরা ট্রি ইটারেটিভলি ট্রাভার্স করব কারণ কনস্ট্রেইন্ট হলো রিকার্শন ছাড়া করা। এটি অর্জন করতে আমরা একটি STL map ব্যবহার করতে পারি যা রুট এলিমেন্ট সংরক্ষণ করবে এবং যখন লেভেল অর্ডার ট্রাভার্সালের মাধ্যমে লিফ নোড চিহ্নিত হবে তবে এটি রুট থেকে লিফ পর্যন্ত পথ প্রিন্ট করবে কারণ একটি ম্যাপ পয়েন্টার আছে যা একটি রুট নোডকে পয়েন্ট করে।

C++ প্রোগ্রামিং-এ রিকার্শন ছাড়া রুট-টু-লিফ পথ প্রিন্ট করা

উপরের ট্রিতে, রুট থেকে লিফ পর্যন্ত পৌঁছানোর জন্য একাধিক পথ তৈরি করা যায় −

10 -> 3 -> 140 10 -> 3 -> 162 10 -> 211 -> 100 10 -> 211 -> 146

অতএব, প্রোগ্রামটি দেয়া বাইনারি ট্রির আউটপুট হিসেবে সব পথ প্রিন্ট করবে।

অ্যালগরিদম

START
Step 1 → create a structure of a node as
   struct Node
      struct node *left, *right
      int data
   End
Step 2 → function to create a node
   node* newnode(int data)
   node->data = data
   node->left = node->right = NULL;
   return (node)
Step 3 → create function to calculate the path
   void calculatePath(Node* curr, map<Node*, Node*> first)
   create STL stack<Node*> stk
   Loop While (curr)
      stk.push(curr)
      curr = first[curr]
   End
   Loop While !stk.empty()
      curr = stk.top()
      stk.pop()
      print curr->data
   End
Step 4 → create function to find the leaf nodes
   void leaf(Node* root)
   IF root = NULL
      Return
   End
   Create STL stack<Node*> stc
   stc.push(root)
   Create STL map<Node*, Node*> prnt
   prnt[root] = NULL
   Loop while !stc.empty()
      Node* curr = stc.top()
      stc.pop()
      IF!(curr->left) && !(curr->right)
         calculatePath(curr, prnt)
      End
      IF curr->right
         prnt[curr->right] = curr
         stc.push(curr->right)
      End
      IF curr->left
         prnt[curr->left] = curr
         stc.push(curr->left)
      End
   End
STOP

উদাহরণ

#include <bits/stdc++.h> using namespace std; //structure of a node struct Node{    int data;    struct Node *left, *right; }; //function to create a new node Node* newNode(int data){    Node* node = new Node;    node->data = data;    node->left = node->right = NULL;    return node; } //this function will calculate the path void calculatePath(Node* curr, map<Node*, Node*> first){    stack<Node*> stk;    while (curr){       stk.push(curr);       curr = first[curr];    }    while (!stk.empty()){       curr = stk.top();       stk.pop();       cout << curr->data << " ";    }    cout << endl; } //this function will lead to the leafs void leaf(Node* root){    if (root == NULL)       return;    stack<Node*> stc;    stc.push(root);    map<Node*, Node*> prnt;    prnt[root] = NULL;    while (!stc.empty()){       Node* curr = stc.top();       stc.pop();       if (!(curr->left) && !(curr->right))          calculatePath(curr, prnt);       if (curr->right){          prnt[curr->right] = curr;          stc.push(curr->right);       }       if (curr->left){          prnt[curr->left] = curr;          stc.push(curr->left);       }    } } int main(){    Node* root = newNode(67); //it will insert the nodes to create a tree    root->left = newNode(34);    root->right = newNode(89);    root->left->left = newNode(23);    root->left->right = newNode(95);    root->right->left = newNode(12);    leaf(root); //call the function leaf    return 0; }

আউটপুট

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

67 34 23 67 34 95 67 89 12

  1. BFS ব্যবহার করে সোর্স থেকে ডেস্টিনেশন পর্যন্ত সব পথ প্রিন্ট করা C++-তে

  2. C++-এ লিংকড লিস্টের אל্টারনেট নোড প্রিন্ট করুন (রিকার্সন ছাড়া)

  3. সি++ প্রোগ্রাম: রিকারশন ছাড়া রুট-টু-লিফ (Root-to-Leaf) সব পাথ প্রিন্ট করা

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