ধরুন আমাদের কাছে ডট (.) এবং একটি সংখ্যা সহ একটি স্ট্রিং আছে, একটি বিন্দু নির্দেশ করে যে ঘরটি খালি আছে এবং যদি কোনো ঘরে একটি সংখ্যা x থাকে তবে এটি নির্দেশ করে যে আমরা স্ট্রিংয়ের মধ্যে x ধাপ ডানে বা বামে যেতে পারি। আমাদের কাজ হল আমরা একাধিকবার একটি সেল পরিদর্শন করতে পারি কিনা তা পরীক্ষা করা। উদাহরণস্বরূপ, যদি একটি স্ট্রিং "এর মতো হয়। 2 . . 2 .", তাহলে আমরা দুটি ভিন্ন উপায়ে 4র্থ কক্ষ পরিদর্শন করতে পারি। দ্বিতীয় ঘর থেকে দুই ধাপ ডানে, অথবা ঘর 6 থেকে দুই ধাপ বাম।
স্ট্রিং এর ith সেলটি কতবার পরিদর্শন করা যেতে পারে তার ট্র্যাক রাখতে আমরা ভিজিটেড[] নামে একটি অ্যারে ব্যবহার করব। এখন স্ট্রিংটি অতিক্রম করুন এবং বর্তমান অক্ষরটি ডট বা একটি সংখ্যা কিনা তা পরীক্ষা করুন। বিন্দুর জন্য, x-এর জন্য কিছুই করবেন না, সংখ্যা বাড়ান এবং পরিদর্শন করা অ্যারেতে [i – x, i + x] পরিসরের ভিজিট সংখ্যা 1 দ্বারা বৃদ্ধি করুন। পরিদর্শন করা অ্যারে অতিক্রম করে, যদি আমরা কিছু রুম পাই তাহলে পরিদর্শন করা হবে। একাধিকবার বা না।
উদাহরণ
#include <iostream>
#include <queue>
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";
} আউটপুট
Tree is level wise Sorted