Giả sử chúng ta có một dãy số; chúng ta phải kiểm tra xem nó có phải là trình tự duyệt được đặt trước chính xác của cây tìm kiếm nhị phân hay không. Chúng ta có thể cho rằng mỗi số trong dãy là duy nhất. Hãy xem xét cây tìm kiếm nhị phân sau -
Vì vậy, nếu đầu vào là [5,2,1,3,6], thì đầu ra sẽ là true
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
itr:=-1
-
thấp:=-infinity
-
để khởi tạo i:=0, khi tôi
-
x:=đặt hàng trước [i]
-
nếu x
-
trả về false
while (itr> =0 và preorder [itr]
-
low:=preorder [itr]
-
(giảm itr 1)
(tăng itr lên 1)
đặt hàng trước [itr]:=x
trả về true
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#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)); }
Đầu vào
{5,2,1,3,6}
Đầu ra
1
-
-