1.和课本思路保持一致,先找到了根节点 因为是二叉搜索树 所以比根节点值小的是左子树,比根节点大的是右子树 判断完一轮后 将左子树放进去再进行判断! 右子树进行判断 ;当然考虑什么时候有左右子树;
class Solution { public: bool VerifySquenceOfBST(vector<int> sequence) { if(sequence.empty()) return false; int length=sequence.size(); int root=sequence.at(length-1);//最后一个 int i=0; vector<int> left; vector<int> right; //找出左子树 值都小于根节点的值 for(i=0;i<length-1;i++) { if(sequence[i]>root) break; //退出循环 得知i left.push_back(sequence[i]); } //找出右子树 值都大于根节点的值 for(int j=i;j<length-1;j++) { if(sequence[j]<root) //后面有比根节点小的 直接报错 return false; right.push_back(sequence[j]); } bool leftflag=true; //如果没有 就是成功 bool rightflag=true; //判断左子树 满足要求吗 if (i>0)//如果存在左子树 { leftflag=VerifySquenceOfBST(left);} if (i<length-1)//如果存在右子树 j增加过 { rightflag=VerifySquenceOfBST(right);} return leftflag&&rightflag; } };