【问题描述】输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。
【输入形式】输入任意长度的数组,数字之间空格分开
【输出形式】true 或者 false
【样例输入】输入5 7 6 9 11 10 8
【样例输出】true
【样例说明】由于这一整数序列是如下树的后序遍历结果:
8
/ \
6 10
/ \ / \
5 7 9 11
因此返回true。
【评分标准】暴力求解法不得分。
#include<stdio.h>
#include<iostream>
using namespace std;
int YON(int *a,int low,int high)//下标
{
int i;
for(i=0;a[i]<a[high];i++);
//printf("%d",i);
if(low>high) return 0;
for(int j=i;j<=high;j++)
if(a[j]<a[high])
return 0;
YON(a,0,i-1);
YON(a,i,high-1);
return 1;
}
int main()
{
int i=0,length=0;
int a[100];
do
{
scanf("%d",&a[i]);
i++;
length++;
}while(getchar()!='\n');
if(YON(a,0,length-1)==1)
printf("true");
else
printf("false");
return 0;
}