আমাদের একটি অ্যারে A আছে, আমাদের পরীক্ষা করতে হবে যে অ্যারেটি n লেভেল সহ একটি BST উপস্থাপন করতে পারে কি না। স্তরটি হিসাবে, আমরা নিম্নলিখিত পদ্ধতিতে একটি গাছ তৈরি করতে পারি। অনুমান করুন একটি সংখ্যা k, k-এর চেয়ে বড় মান ডান দিকে চলে যায় এবং k-এর চেয়ে কম বাম দিকে চলে যায়। ধরুন দুটি তালিকা আছে:{50, 20, 9, 25, 10}, এবং {50, 30, 20, 25, 10}

প্রথমটি বৈধ নয়, তবে দ্বিতীয়টি বৈধ৷
৷এটি পরীক্ষা করতে আমরা হয় একটি BST তৈরি করতে পারি এবং উচ্চতা পরীক্ষা করতে পারি, অন্যথায় অ্যারে ভিত্তিক পদ্ধতি ব্যবহার করতে পারি। অ্যারে ভিত্তিক পদ্ধতি নীচের মত -
- বাম সাবট্রির সর্বোচ্চ সীমা চিহ্নিত করতে দুটি পরিবর্তনশীল max =অসীমতা নিন এবং ডান সাবট্রির সর্বনিম্ন সীমা চিহ্নিত করতে min =ঋণাত্মক অসীম নিন
- রেঞ্জ arr[i] থেকে arr[n – 1] এর প্রতিটি উপাদানের জন্য, নিম্নলিখিত ধাপগুলি পুনরাবৃত্তি করুন
- যদি arr[i]> arr[i - 1] এবং arr[i]> min এবং arr[i]
- অন্যথায় যদি arr[i]> min এবং arr[i]
- যদি এগুলোর কোনোটিই বৈধ না হয়, তাহলে উপাদানটিকে একটি নতুন স্তরে ঢোকানো হবে, তাই বিরতি দিন
- অন্যথায় যদি arr[i]> min এবং arr[i]
- যদি arr[i]> arr[i - 1] এবং arr[i]> min এবং arr[i]
উদাহরণ
#include <iostream>
using namespace std;
bool canMakeBSTifHeightN(int arr[], int n) {
int min = INT_MIN;
int max = INT_MAX;
for(int i = 1; i < n; i++){
if (arr[i] > arr[i - 1] && arr[i] > min && arr[i] < max) {
min = arr[i - 1];
} else if (arr[i] < arr[i - 1] && arr[i] > min && arr[i] <
max) {
max = arr[i - 1];
} else {
return true;
}
}
return false;
}
int main() {
int elements[] = {50, 30, 20, 25, 10};
int n = sizeof(elements)/sizeof(elements[0]);
if (canMakeBSTifHeightN(elements, n))
cout << "We can make BST of height " << n;
else
cout << "We can not make BST of height " << n;
} আউটপুট
We can make BST of height 5