Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 이진 검색 트리에서 선주문 시퀀스 확인

<시간/>

일련의 숫자가 있다고 가정합니다. 이진 탐색 트리의 올바른 선주문 순회 시퀀스인지 확인해야 합니다. 시퀀스의 각 숫자가 고유하다고 가정할 수 있습니다. 다음 이진 검색 트리를 고려하십시오 -

C++의 이진 검색 트리에서 선주문 시퀀스 확인

따라서 입력이 [5,2,1,3,6]과 같으면 출력은 true가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • itr :=-1

  • 낮음 :=-무한대

  • for initialize i :=0, i <사전 주문 크기, 업데이트(i 1 증가), −

    • x :=선주문[i]

    • x <낮으면 -

      • 거짓을 반환

    • 동안 (itr>=0 및 preorder[itr]

      • 낮음 :=선주문[itr]

      • (1만큼 감소)

    • (1만큼 증가)

    • 선주문[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