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\n"); else printf("NO\n"); } return 0; }
题目链接:http://www.patest.cn/contests/mooc-ds/04-%E6%A0%917
版权声明:本文为博主原创文章,未经博主允许不得转载。