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

C++-এ একটি বাইনারি ট্রি লেভেলওয়াইজ সর্টেড কিনা চেক করা

এখানে আমরা দেখব কিভাবে একটি বাইনারি ট্রি লেভেলওয়াইজ সর্টেড কিনা চেক করতে হয়। লেভেলওয়াইজ সর্টেড বাইনারি ট্রি নিচের মতো দেখাবে:

C++-এ একটি বাইনারি ট্রি লেভেলওয়াইজ সর্টেড কিনা চেক করা

প্রতিটি লেভেলে নোডগুলো বাম থেকে ডানে সর্টেড থাকে এবং প্রতিটি লেয়ার তার আগের লেয়ারের চেয়ে বেশি মান ধারণ করে।

এই সমস্যাটি লেভেল অর্ডার ট্রাভার্সাল করলে সমাধান করা যায়। বর্তমান লেভেলের মিনিমাম এবং ম্যাক্সিমাম এলিমেন্ট ট্র্যাক রাখুন। অন্য একটি ভেরিয়েবল prev_max ব্যবহার করুন পূর্বের লেভেলের ম্যাক্সিমাম ভ্যালু রাখতে। তারপর বর্তমান লেভেলের মিনিমাম ভ্যালু এবং পূর্বের লেভেলের ম্যাক্সিমাম ভ্যালু prev_max তুলনা করুন। যদি মিন ভ্যালু prev_max থেকে বড় হয়, তবে ট্রি বর্তমান লেভেল পর্যন্ত লেভেলওয়াইজ সর্টেড। তারপর prev_max আপডেট করুন এবং বর্তমান লেভেলের ম্যাক্স ভ্যালু আপডেট করুন। সকল লেভেল ট্রাভার্স না হওয়া পর্যন্ত এটি दुহরান।

উদাহরণ কোড

#include <iostream>
#include <queue>
#include <climits>
#include <algorithm>
using namespace std;

class Node {
public:
    int key;
    Node *left, *right;
};

Node* getNode(int key) {
    Node* newNode = new Node;
    newNode->key = key;
    newNode->left = newNode->right = NULL;
    return newNode;
}

bool isLevelWiseSorted(Node* root) {
    int prevMax = INT_MIN;
    int min_val, max_val;
    int levelSize;
    queue<Node*> q;
    q.push(root);
    while (!q.empty()) {
        levelSize = q.size();
        min_val = INT_MAX;
        max_val = INT_MIN;
        while (levelSize > 0) {
            root = q.front();
            q.pop();
            levelSize--;
            min_val = min(min_val, root->key);
            max_val = max(max_val, root->key);
            if (root->left)
                q.push(root->left);
            if (root->right)
                q.push(root->right);
        }
        if (min_val <= prevMax)
            return false;
        prevMax = max_val;
    }
    return true;
}

int main() {
    Node* root = getNode(1);
    root->left = getNode(2);
    root->right = getNode(3);
    root->left->left = getNode(4);
    root->left->right = getNode(5);
    root->right->left = getNode(6);
    root->right->right = getNode(7);
    if (isLevelWiseSorted(root))
        cout << "Tree is levelwise Sorted";
    else
        cout << "Tree is Not levelwise sorted";
    return 0;
}

আউটপুট

Tree is level wise Sorted
  1. C++-এ একটি ট্রি গ্রাফ লিনিয়ার কিনা তা যাচাই করা

  2. C++-এ একটি বাইনারি ট্রি SumTree কিনা তা যাচাই করা

  3. C++-এ একটি বাইনারি ট্রি অন্য বাইনারি ট্রির সাবট্রি কিনা তা যাচাই করা

  4. C++-এ একটি বাইনারি ট্রি লেভেল-ওয়াইজ সর্টেড কিনা তা যাচাই করা