左子树的元素都小于根节点,右子树都大于根节点
#include<stdio.h>
#define DEBUG 0
static int tailtree(int *arr, int start, int end)
{
int i = 0;
int ret = 0;
#if DEBUG
// debug
for(i=start; i<end; i++){
printf("%d\t", arr[i]);
}
printf("\n");
#endif
int root = arr[end];
int left[end], right[end];
//printf("root is %d\n", root);
int j = 0;
for(i=start, j=0; i<end, j<end; i++, j++){
if(arr[i]>=root)
break;
left[j] = arr[i];
}
int left_end = j;
#if DEBUG
int k = 0;
for(k=0;k<j; k++){
printf("%d\t", left[k]);
}
printf("\n");
#endif
for(j=0;i<end,j<end;j++,i++){
if(arr[i]<=root)
break;
right[j] = arr[i];
}
if(i!=end)
return 0;
int right_end = j;
#if DEBUG
for(k=0;k<j; k++){
printf("%d\t", right[k]);
}
printf("\n");
#endif
//return 0;
//printf("left_end is %d\n", left_end);
int ret_left = 1, ret_right = 1;
if(left_end>0)
ret_left = tailtree(left, 0, left_end-1);
if(right_end>0)
ret_right = tailtree(right, 0, right_end-1);
return ret_left&ret_right;
}
int main()
{
int arr[] = {5,7,6,9,11,10,3,8};
int start = 0;
int end = sizeof(arr)/sizeof(arr[0])-1;
int i = 0;
printf("ret is %d\n", tailtree(arr, start, end));
}