二叉搜索树的后序遍历序列

来源:互联网 发布:300英雄淘宝四周年 编辑:程序博客网 时间:2024/06/06 00:06
题目1367:二叉搜索树的后序遍历序列

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:1474

解决:740

题目描述:

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

输入:

每个测试案例包括2行:

第一行为1个整数n(1<=n<=10000),表示数组的长度。

第二行包含n个整数,表示这个数组,数组中的数的范围是[0,100000000]。

输出:

对应每个测试案例,如果输入数组是某二叉搜索树的后序遍历的结果输出Yes,否则输出No。

样例输入:
75 7 6 9 11 10 847 4 6 5
样例输出:
Yes
No
//c中没有bool类型 #include<stdio.h>#include<malloc.h>int isValid(int *arr,int n){    int i;    int right_index=n-1;    int is_valid=1;    for(i=n-2;i>=0;i--)    {        if(arr[i]<arr[n-1])        {            right_index=i+1;            break;          }        right_index=i;    }    if(right_index==0)        return is_valid;    for(i=right_index-1;i>=0;i--)    {        if(arr[i]>=arr[n-1])        {            is_valid=0;            return is_valid;        }    }    return is_valid; }int main(){    int n;    int i;    int is_valid;    while(scanf("%d",&n)!=EOF)    {        int *arr=(int *)malloc(sizeof(int)*n);        for(i=0;i<n;i++)            scanf("%d",&arr[i]);        is_valid=isValid(arr, n);        if(is_valid)            printf("Yes\n");        else            printf("No\n");     }    return 0; }/**************************************************************    Problem: 1367    User: road    Language: C    Result: Accepted    Time:10 ms    Memory:912 kb****************************************************************/

0 0