zoukankan      html  css  js  c++  java
  • [九度][何海涛] 二叉搜索树的后序遍历序列

    题目描述:

    输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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

    由于BST的左半部分都小于根,右半部分都大于根,我们可以根据这条性质来判断。后续遍历的最后一个是根,所以先找出根,然后找出右半部分就是连续大于根的部分,然后再去判断左半部分有大于根的元素肯定就不符合了。然后递归判断左子树和右子树。
    P.S. 如果给的是一棵中序遍历的BST呢?可能的解答就是先枚举根的位置枚举的同时判断左半部分和右半部分时候是否符合BST的性质。
     1 #include <iostream>
     2 using namespace std;
     3 
     4 bool check(int a[], int beg, int end)
     5 {
     6     if (beg > end)
     7         return true;
     8 
     9     int root = a[end];
    10 
    11     int mid = end - 1;
    12 
    13     while(mid >= beg)
    14     {
    15         if (a[mid] > root)
    16             mid--;
    17         else
    18             break;
    19     }
    20 
    21     for(int i = beg; i <= mid; i++)
    22         if (a[i] > root)
    23             return false;
    24 
    25     bool left = check(a, beg, mid);
    26     bool right = check(a, mid + 1, end - 1);
    27 
    28     return left && right;
    29 }
    30 
    31 int main()
    32 {
    33     int n;
    34     int a[10000];
    35 
    36     while(cin >> n)
    37     {
    38         for(int i = 0; i < n; i++)
    39             cin >> a[i];
    40 
    41         if (check(a, 0, n - 1))
    42             cout << "Yes" << endl;
    43         else
    44             cout << "No" << endl;
    45     }
    46 }
  • 相关阅读:
    C++ 使用STL string 实现的split,trim,replace
    C++ int 转 string (使用stringstream)
    php加速器之 eAccelerator 安装方法
    C++ vector容器类型
    C/C++获取当前系统时间
    ABAP开发基础知识:2) 变量的声明(Declaring Variables)
    网页开发中常用到的Firefox附加组件
    SAP系统介绍
    ABAP开发基础知识:1) ABAP基础程序类型(ABAP Elementary Data Types)
    ABAP开发基础知识:4) 结构体(Structure)
  • 原文地址:https://www.cnblogs.com/chkkch/p/2780639.html
Copyright © 2011-2022 走看看