zoukankan      html  css  js  c++  java
  • [Jobdu] 题目1367:二叉搜索树的后序遍历序列

    题目描述:

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

    输入:

    每个测试案例包括2行:

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

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

    输出:

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

    样例输入:
    7
    5 7 6 9 11 10 8
    4
    7 4 6 5
    
    样例输出:
    Yes
    No
    代码:
     1 #include <cstdio>
     2  
     3 int isValid(int a[], int low, int high) {
     4     if (low >= high)
     5         return 1;
     6  
     7     int root = a[high];
     8     int i = low;
     9     while (a[i] < root && i <= high)
    10         i++;
    11     for (int j = i; j < high; j++)
    12         if (a[j] < root)
    13             return false;
    14     return isValid(a, low, i - 1) && isValid(a, i, high - 1);
    15 }
    16  
    17 int main() {
    18     int n;
    19     while (scanf("%d", &n) != EOF) {
    20         int a[n];
    21         for (int i = 0; i < n; ++i)
    22             scanf("%d", &a[i]);
    23  
    24         if (isValid(a, 0, n - 1)) {
    25             printf("Yes
    ");
    26         } else {
    27             printf("No
    ");     
    28         }
    29     }
    30     return 0;
    31 }
    32 /**************************************************************
    33     Problem: 1367
    34     User: tonyhu
    35     Language: C++
    36     Result: Accepted
    37     Time:10 ms
    38     Memory:1020 kb
    39 ****************************************************************/
  • 相关阅读:
    [转载]苹果推送通知服务
    Lovekey
    大数阶乘的位数
    大明A+B
    大数取余
    A+Bcoming
    大数取余(C++)
    验证角谷猜想
    麦森数(转)
    大数阶乘的位数(C++)
  • 原文地址:https://www.cnblogs.com/tonyhu1993/p/4702979.html
Copyright © 2011-2022 走看看