标签:
在二叉查找树中的路径,有什么规律?
我们来分析一次
input: 1 4 2 3 一开始我们定义一个可容纳区间为[0,INFINITE) // infinite 指无穷 先读入1, 再读入4,4的前一个数是1,4>1>0,所以区间范围缩小到[1,INFINITE) 再读入2,2的前一个数是4,2<4<INFINITE,所以区间范围缩减到[1,4] 再读入3,3的前一个数是2,3>2>1,所以区间范围缩减到[2,4] 后面没有数了,输出YES input:1 4 2 5 3 读入1, 读入4,4>1>0,区间[1,INFINITE) 读入2,2<4<INFINITE,区间[1,4] 读入5,5>2>1,区间[2,4] !但是5不再属于这个区间! 后面的输入扔掉,输出NO
机智一点,一开始区间取[1,max]就可以了 = =
大功告成!
各种边界条件也要测试好哦 = =
#include <iostream> using namespace std; int main() { int t, n, min, max, oldNum, newNum; /* t 测试次数 n 每次有多少个数 * min 当前区间最小值 max 当前区间最大值 * oldNum 前一个得到的数字 newNum 后一个得到的数字 */ cin >> t >> n; for (int j = 0; j<t; j++){ min = 1, max = n; cin >> oldNum; if (n == 1){ cout << "YES" << endl; continue; } for (int i = 0; i < n - 1; i++){ cin >> newNum; if (newNum>oldNum && oldNum>min){ min = oldNum; } else if (newNum < oldNum && oldNum < max){ max = oldNum; } oldNum = newNum; if (min <= newNum && newNum <= max){ if (i == n - 2){ cout << "YES" << endl; } continue; } else{ cout << "NO" << endl; while (getchar() != ‘\n‘); break; } } } }
Search in a Binary Search Tree (25)
标签:
原文地址:http://www.cnblogs.com/zhouyiji/p/4562130.html