判断一个数字序列是否为二叉排序树的后续遍历,其实就是一个递归,算法很短。
#include<stdio.h>
bool IsPostSeq(int* Arr, int low, int high)
{
if(low>high) return false;
if(low==high) return true;
int pivot=Arr[high];
int pos=low;
int i=low;
while(Arr[i]<pivot && i<=high-1) i++;
pos=i;
for(int j=pos; j<=high-1; j++)
{
if(Arr[j]<pivot)
return false;
}
if(pos==high) return IsPostSeq(Arr, low, pos-1);
else if(pos==0) return IsPostSeq(Arr, pos, high-1);
else IsPostSeq(Arr, low, pos-1)&&IsPostSeq(Arr, pos, high-1);
}
int main(int argc, char** argv)
{
int A[10]={5, 9, 6, 14, 16, 19, 18, 20, 15, 12};
bool b=IsPostSeq(A, 0, 9);
return 0;
}