일련의 숫자가 있다고 가정합니다. 이진 탐색 트리의 올바른 선주문 순회 시퀀스인지 확인해야 합니다. 시퀀스의 각 숫자가 고유하다고 가정할 수 있습니다. 다음 이진 검색 트리를 고려하십시오 -
따라서 입력이 [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