เรามีอาร์เรย์ A เราต้องตรวจสอบว่าอาร์เรย์สามารถแสดง BST ที่มีระดับ n ได้หรือไม่ ตามระดับที่กำหนด เราสามารถสร้างต้นไม้ในลักษณะดังต่อไปนี้ สมมติว่าตัวเลขคือ k ค่าที่มากกว่า k จะเลื่อนไปทางขวา และน้อยกว่า k จะเคลื่อนที่ไปทางซ้าย สมมติว่ามี 2 รายการ:{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