后序,左右根。
设l为左端,r为右端,vector为a。 a[r]一定是根。
比a[r]大的都是右儿子,比a[r]小的都是左儿子。
那么找到一个i为分界线递归判断即可。
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.size() == 0) return false;
return dfs(sequence, 0, sequence.size() - 1);
}
bool dfs(vector<int> a, int l, int r) {
if(l >= r) return true;
int i;
for(i = r - 1; a[i] >= a[r] && i >= l; i--);
for(int j = i; j >= l; j--) if(a[j] > a[r]) return false;
return dfs(a, l, i) && dfs(a, i + 1, r - 1);
}
};