只能膜拜大佬,自己写的好复杂,但是结构比较清晰。
不说了,注解 如下,我去学习其他大佬的代码了。
//后续遍历的最后一个节点是根节点,可以把搜索树分成两部分 //找到第一个比根节点小的集和,因此划成左右子树,左集合里不能有比根节点大的。如果有return false **算法流程**: //判断vector是否为空,不为空,继续判断,若为空 return false //拿出右边第一个元素(根节点)c //从右往左找到第一个比根节点小的节点下标index //划分集和,把(0,index)划分为一组,判断这组里是否有比根节点c大的,如果有return false //(因为不符合搜索树的条件,搜索树话分成两组,一组比 根节点大,一组比根节点小,根节点小的组里不可能有比根节点大的) //如果没有,继续划分,直到找不到比c小的,return true;
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.size()==0)
return false;
int c=sequence[sequence.size()-1]; //根节点
int index; //找到第一个比c根节点小的节点
for(index=sequence.size()-2;index>=0;index--){
if(sequence[index]<c)
break;
}
if(index<0) //没有找到比c小的节点,return true;
return true;
vector<int> temp;
for(int i=0;i<=index;i++){
if(sequence[i]>c)
return false;
temp.push_back(sequence[i]);
}
return VerifySquenceOfBST(temp);
}
};


京公网安备 11010502036488号