输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路:符合二叉搜索树的后续遍历序列应该具备这样的特点:
序列划分为三部分,第一部分左侧,比最后一个元素小;
第二部分右侧,壁最后一个元素大;
第三部分,最后一个元素。
那么判断一个序列是否是该序列的方法:从序列左侧开始访问,标记第一个比最后一个元素大的元素,从此元素开始,到最后一个元素前一个元素,若遇到比最后一个元素小的元素则不符合。
递归方式:
bool VerifySquenceOfBST(vector<int> sequence) {
//二叉搜索树后序遍历
if(sequence.empty()) return false;
return Verify(sequence,0,sequence.size()-1);
}
bool Verify(vector<int>seq,int left,int right)
{
if(left>=right) return true;
int mid;
for(int i=left;i<right;i++)
{
if(seq[i]>=seq[right])
{
mid=i-1;
break;
}
}
for(int i=mid+1;i<right;i++)
{
if(seq[i]<seq[right])
return false;
}
return Verify(seq,left,mid)&&Verify(seq,mid+1,right-1);
}