zoukankan      html  css  js  c++  java
  • 04-树7. Search in a Binary Search Tree (25)

    04-树7. Search in a Binary Search Tree (25)

    时间限制
    100 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    CHEN, Yue

    To search a key in a binary search tree, we start from the root and move all the way down, choosing branches according to the comparison results of the keys. The searching path corresponds to a sequence of keys. For example, following {1, 4, 2, 3} we can find 3 from a binary search tree with 1 as its root. But {2, 4, 1, 3} is not such a path since 1 is in the right subtree of the root 2, which breaks the rule for a binary search tree. Now given a sequence of keys, you are supposed to tell whether or not it indeed correspnds to a searching path in a binary search tree.

    Input Specification:

    Each input file contains one test case. For each case, the first line gives two positive integers N and M (<=100) which are the total number of sequences, and the size of each sequence, respectively. Then N lines follow, each gives a sequence of keys. It is assumed that the keys are numbered from 1 to M.

    Output Specification:

    For each sequence, print in a line "YES" if the sequence does correspnd to a searching path in a binary search tree, or "NO" if not.

    Sample Input:
    3 4
    1 4 2 3
    2 4 1 3
    3 2 4 1
    
    Sample Output:
    YES
    NO
    NO
    
    
    
    
    

    #include <stdio.h>
    //搜索树要求路径中任一元素的右边全部元素都要同一时候大于它或小于它;
    //直接遍历每一个元素,比較右边元素大小关系。时间复杂度为O(n^2)。超时;
    //O(n)方法:从路径尾部開始,分别维护两个变量:当前尾部元素的最大值和最小值。

    int judgePath(int *path, int n) { int min = path[n - 1], max = path[n - 1]; for (int i = n - 2; i >= 0; --i) { if (path[i] > max) //假设当前元素比最大值还大。说明后面的路径是当前元素的左子树。可行 max = path[i]; //更新最大值 else if (path[i] < min) min = path[i]; else //当前元素介于最大值与最小值之间。不可行 return 0; } return 1; } int main() { // freopen("test.txt", "r", stdin); int n, m; scanf("%d%d", &n, &m); while (n--) { //n个測试用例 int path[100] = {}; for (int i = 0; i < m; ++i) { scanf("%d", &path[i]); } if (judgePath(path, m)) printf("YES "); else printf("NO "); } return 0; }


    题目链接:http://www.patest.cn/contests/mooc-ds/04-%E6%A0%917

  • 相关阅读:
    poj 1200 crasy search
    cdoj 1092 韩爷的梦
    fzu 2257 saya的小熊饼干
    zoj 3950 how many nines
    zoj 3963 heap partion
    fzu 2256 迷宫
    fzu 2253 salty fish
    hdu 2473 Junk-Mail Filter
    codeforces 129B students and shoes
    hdu 3367 Pseudoforest
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7298549.html
Copyright © 2011-2022 走看看