题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路:递归判断该后序序列是否满足左右根,小大中。
class Solution { public: bool VerifySquenceOfBST(vector<int> sequence) { //从前往后找到第一个大于根节点的点ir if(sequence.size()==0){ return false; } bool res =getRes(sequence,0,sequence.size()-1); return res; } bool getRes(vector<int> s, int start, int end){ int j=0; int i=0; if(end-start<=1){ return true; } for( i=start;i<end;i++){ if(s[i]>s[end]){ break; } } for(j=i;j<end;j++){ if(s[j]<s[end]){ return false; } } bool left = true; bool right = true; if(i>0){ left = getRes(s,start,i-1); } if(i<s.size()-1){ right= getRes(s,i,end-1); } return left&&right; } };