只能膜拜大佬,自己写的好复杂,但是结构比较清晰。
不说了,注解 如下,我去学习其他大佬的代码了。
//后续遍历的最后一个节点是根节点,可以把搜索树分成两部分 //找到第一个比根节点小的集和,因此划成左右子树,左集合里不能有比根节点大的。如果有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); } };