สมมติว่ามีลำดับตัวเลข เราต้องตรวจสอบว่ามันเป็น preorder traversal sequence ที่ถูกต้องของ binary search tree หรือไม่ เราสามารถสมมติได้ว่าแต่ละตัวเลขในลำดับไม่ซ้ำกัน พิจารณา binary search tree ต่อไปนี้ −

เช่น ถ้าอินพุทเป็น [5,2,1,3,6] ผลลัพธ์จะเป็น true
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนดังนี้ −
itr := -1
low := -infinity
ลูป i := 0 ถึงขนาดของ preorder-1 ทำ −
x := preorder[i]
ถ้า x < low แล้ว −
คืนค่า false
ลูป while (itr >= 0 และ preorder[itr] < x) ทำ −
low := preorder[itr]
ลด itr ลง 1
เพิ่ม itr ขึ้น 1
preorder[itr] := x
คืนค่า true
ตัวอย่าง
ลองดูการติดตั้งต่อไปนี้เพื่อให้เข้าใจได้ดีขึ้น −
#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