কম্পিউটার

C++ এ বাইনারি ট্রি-তে দুটি প্রদত্ত স্তরের মধ্যে সমস্ত নোড প্রিন্ট করুন


এই সমস্যায়, আমাদের একটি বাইনারি ট্রি এবং গাছে দুটি স্তর দেওয়া হয়েছে (উপরের এবং নীচের) এবং আমাদের গাছের উপরের এবং নীচের স্তরের মধ্যে সমস্ত নোড প্রিন্ট করতে হবে৷

বাইনারী গাছ একটি বিশেষ গাছ যার প্রতিটি নোডে সর্বোচ্চ দুটি নোড থাকে (এক/দুই/কোনটি নয়)।

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক -

C++ এ বাইনারি ট্রি-তে দুটি প্রদত্ত স্তরের মধ্যে সমস্ত নোড প্রিন্ট করুন

উপরের − 1

নিম্ন - 3

আউটপুট

6
3 9
7 4 8 10

এই সমস্যা সমাধানের জন্য, আমাদের একটি নির্দিষ্ট স্তরে গাছের নোডগুলি প্রিন্ট করতে হবে। আমরা উপরের থেকে একটি লুপ ব্যবহার করে একটি পুনরাবৃত্ত ফাংশন কল করব নীচে গাছে স্তর।

এই অ্যালগরিদমটি সহজ কিন্তু ক্রম n 2 এর ক্ষেত্রে আরও জটিল .

একটি আরও কার্যকর সমাধান হল ইনঅর্ডার ট্রাভার্সাল করা এবং একটি সারি ব্যবহার করা। এবং প্রদত্ত উপরের এবং নিম্ন স্তরের মধ্যে নোডগুলি মুদ্রণ করুন৷

আমাদের সমাধান বাস্তবায়নের জন্য প্রোগ্রাম -

উদাহরণ

#include <iostream>
#include <queue>
using namespace std;
struct Node{
   int key;
   struct Node* left, *right;
};
void printNodesAtLevel(Node* root, int low, int high){
   queue <Node *> Q;
   Node *marker = new Node;
   int level = 1;
   Q.push(root);
   Q.push(marker);
   while (Q.empty() == false){
      Node *n = Q.front();
      Q.pop();
      if (n == marker){
         cout << endl;
         level++;
         if (Q.empty() == true || level > high) break;
         Q.push(marker);
         continue;
      }
      if (level >= low)
         cout<<n->key<<" ";
      if (n->left != NULL) Q.push(n->left);
      if (n->right != NULL) Q.push(n->right);
   }
}
Node* insertNode(int key){
   Node* temp = new Node;
   temp->key = key;
   temp->left = temp->right = NULL;
   return (temp);
}
int main() {
   struct Node *root = insertNode(6);
   root->left = insertNode(3);
   root->right = insertNode(9);
   root->left->left = insertNode(7);
   root->left->right = insertNode(4);
   root->left->right->left = insertNode(8);
   root->left->right->right = insertNode(10);
   root->left->right->right->left = insertNode(5);
   root->left->right->right->right = insertNode(1);
   root->left->right->left->left = insertNode(14);
   root->left->right->left->right = insertNode(26);
   int upper = 3;
   int lower = 1;
   cout << "Level wise Nodes between level "<<lower<<" and "<<upper<<" are \n";
   printNodesAtLevel(root, lower, upper);
   return 0;
}

আউটপুট

Level wise Nodes between level 1 and 3 are
6
3 9
7 4

  1. C++ এ একটি বাইনারি ট্রির দুটি নোডের মধ্যে দূরত্ব খুঁজুন

  2. C++ এ প্রদত্ত নিখুঁত বাইনারি গাছের সমস্ত নোডের সমষ্টি খুঁজুন

  3. C++ প্রোগ্রামিং-এ বাইনারি ট্রিতে যেকোনো দুটি নোডের মধ্যে প্রিন্ট পাথ।

  4. C++ প্রোগ্রামিং-এ একটি বাইনারি ট্রিতে সমস্ত নোডের লেভেল প্রিন্ট করুন।