Computer >> Máy Tính >  >> Lập trình >> C ++

Xác minh trình tự đặt hàng trước trong cây tìm kiếm nhị phân trong C ++

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 -

Xác minh trình tự đặt hàng trước trong cây tìm kiếm nhị phân trong C ++

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