码迷,mamicode.com
首页 > 其他好文 > 详细

Search in a Binary Search Tree (25)

时间:2015-06-08 22:58:50      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

在二叉查找树中的路径,有什么规律?

我们来分析一次

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!