1.鲁棒性
2.递归判断,题解都在代码里
class Solution {
public:
bool testBST(int start, int end,const vector<int>& sequence){
if(start >= end) return true;
int rIndex = start;//从start位往后找一直找到end为止,不是从0开始找啊笨蛋
while(sequence[rIndex] < sequence[end]){
rIndex++;
}
//此时rIndex前的就是左子树而且一定比前面的都大,所以只要判断后面是否都比这个结点大即可
for(int i = rIndex; i < end; ++i){
if(sequence[i] < sequence[end]){
return false;
}
}
return testBST(start,rIndex-1,sequence) && testBST(rIndex,end-1,sequence);
}
bool VerifySquenceOfBST(vector<int> sequence) {
//鲁棒性
if(sequence.size() == 0) return false;
//两个下标可以确定一棵树
//时复应该也是O(N^2),因为要检查n个结点,检查函数的时复是O(n)
return testBST(0,sequence.size()-1,sequence);
}
};