#include <climits>
class Solution {
public:
//对数组进行逆序检测,会按照根节点-》右子树-》左子树 的顺序,并且以此检测是按照,根-》右子树-》右子树根-》右子树,直到遇到小于前一个数的值,即最下层的左子树,
//数大于后面的数,即它是前一个数的右子树且根节点,若数小于后数,则遇到了左子树,但不知道是谁的左子树,栈维护;
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.empty()){
return false;
}
int root = INT_MAX;
stack<int> s;
for(int i=sequence.size()-1; i >= 0; --i){
if(sequence[i] > root){
//左子树却存在大于其根节点的值那么就是不合法的
return false;
}
while(!s.empty() && s.top() > sequence[i]){ //对左子树找它的根节点
root = s.top();s.pop();
}
s.push(sequence[i]); //存入根节点
}
return true;
}
};