สมมติว่าเรามีลำดับของตัวเลข เราต้องตรวจสอบว่าเป็นลำดับการสั่งจองล่วงหน้าที่ถูกต้องของทรีการค้นหาแบบไบนารีหรือไม่ เราสามารถสรุปได้ว่าตัวเลขแต่ละตัวในลำดับนั้นไม่ซ้ำกัน พิจารณาแผนผังการค้นหาไบนารีต่อไปนี้ -

ดังนั้นหากอินพุตเป็น [5,2,1,3,6] ผลลัพธ์จะเป็นจริง
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
itr :=-1
-
ต่ำ :=-อินฟินิตี้
-
สำหรับการเริ่มต้น i :=0 เมื่อ i <ขนาดของการสั่งซื้อล่วงหน้า ให้อัปเดต (เพิ่ม i ขึ้น 1) ทำ -
-
x :=สั่งซื้อล่วงหน้า[i]
-
ถ้า x <ต่ำ แล้ว −
-
คืนค่าเท็จ
-
-
ในขณะที่ (itr>=0 และสั่งซื้อล่วงหน้า[itr]
-
ต่ำ :=สั่งซื้อล่วงหน้า[itr]
-
(ลดลงทีละ 1)
-
-
(เพิ่มขึ้นอีก 1)
-
สั่งซื้อล่วงหน้า[itr] :=x
-
-
คืนความจริง
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool verifyPreorder(vector<int<& preorder) {
int itr = -1;
int low = INT_MIN;
for (int i = 0; i < preorder.size(); i++) {
int x = preorder[i];
if (x < low)
return false;
while (itr >= 0 && preorder[itr] < x) {
low = preorder[itr];
itr--;
}
itr++;
preorder[itr] = x;
}
return true;
}
};
main(){
Solution ob;
vector<int< v = {5,2,1,3,6};
cout << (ob.verifyPreorder(v));
} อินพุต
{5,2,1,3,6} ผลลัพธ์
1