有个规律,前序遍历,中序遍历,后序遍历都是沿着树边逆时针转一圈。
后序遍历只需要判断最后一个元素是否可以划分前面序列为两部分:
代码:
class Solution {
public:
// 最后一个数字是否能划分数据;
bool solve(vector<int> s,int l,int r){
if(l >= r-1) return true;
int key = s[r-1];
bool ans = true;
int flag = -1;
for(int i = l;i<r-1;i++){
if(flag == -1&&s[i] > key){
flag = i;
}
if(flag != -1&&s[i] < key){
ans = false;
}
}
if(flag == -1) return solve(s,l,r-1);
else if(ans) return solve(s,l,flag-1) && solve(s,flag,r-1);
else return ans;
}
bool VerifySquenceOfBST(vector<int> sequence) {
int L = sequence.size();
if(L<=0) return false;
return solve(sequence,0,L);
}
};