题目内容
1.1 问题描述
输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。
1.2 输入形式
输入任意长度的数组,数字之间空格分开
1.3 输出形式
true 或者 false
1.4 样例输入
输入5 7 6 9 11 10 8
1.5 样例输出
true
1.6 样例说明
由于这一整数序列是如下树的后序遍历结果:
8
/ \
6 10
/ \ / \
5 7 9 11
因此返回true。
2 解题思路
分治大法好
3 运行代码
#include<stdio.h>
int is_BinarySearchTree(int a[], int first, int last)
{
int flag = 1;
if(first == last) return 1;
int root = a[last];
int i, j;
for(i = first; i < last; i++)
{
if(a[i] > root) // i是左子树的起点
{
break;
}
}
for(j = i; j < last; j++)
{
if(a[j] < root)
{
return 0;
}
}
if(i > first)
{
flag = flag && is_BinarySearchTree(a, first, i-1) ? 1 : 0;
}
if(i <= last-1)
{
flag = flag && is_BinarySearchTree(a, i, last-1) ? 1 : 0;
}
return flag;
}
int main(void)
{
int maxv = 100+5;
int post_order[maxv];
int i = 0;
while(scanf("%d", &post_order[i++]) != EOF);
if(is_BinarySearchTree(post_order, 0, i-1))
{
printf("true\n");//7465
}
else
{
printf("false\n");
}
return 0;
}
4 学习后言
抄了别人的思路。