• 排序二叉树 HDOJ 5444 Elven Postman


    题目传送门

    题意:给出线性排列的树,第一个数字是根节点,后面的数如果当前点小或相等往左走,否则往右走,查询一些点走的路径

    分析:题意略晦涩,其实就是排序二叉树!1<<1000 普通数组开不下,用指针省内存。将树倒过来好理解些

    E---------------------------------------W
                        2
                       / 
                      1   4
                          /
                         3
    
                         6
                        /
                       5
                      /
                     4
                    / 
                   3
                  /
                 2
                /
               1
    E---------------------------------------W
    

    收获:排序二叉树插入和查询

    代码:

    /************************************************
    * Author        :Running_Time
    * Created Time  :2015/9/14 星期一 15:34:35
    * File Name     :H.cpp
     ************************************************/
    #include <cstdio>
    #include <algorithm>
    #include <iostream>
    #include <sstream>
    #include <cstring>
    #include <cmath>
    #include <string>
    #include <vector>
    #include <queue>
    #include <deque>
    #include <stack>
    #include <list>
    #include <map>
    #include <set>
    #include <bitset>
    #include <cstdlib>
    #include <ctime>
    using namespace std;
    
    #define lson l, mid, rt << 1
    #define rson mid + 1, r, rt << 1 | 1
    typedef long long ll;
    const int N = 1e3 + 10;
    const int INF = 0x3f3f3f3f;
    const int MOD = 1e9 + 7;
    int a[N], q[N];
    struct BST {
        int val;
        BST *left, *right;
        BST *insert(BST *p, int x) {
            if (p == NULL)  {
                BST *t = new BST;
                t->val = x;
                t->left = t->right = NULL;
                return t;
            }
            if (x <= p->val)    p->left = insert (p->left, x);
            else    p->right = insert (p->right, x);
            return p;
        }
        bool find(BST *p, int x)   {
            if (x == p->val)    return true;
            else if (p == NULL) return false;
            else if (x <= p->val)    {
                cout << "E";
                return find (p->left, x);
            }
            else    {
                cout << "W";
                return find (p->right, x);
            }
        }
    }bst;
    
    int main(void)    {
        ios::sync_with_stdio (false);
        int T;  cin >> T;
        while (T--) {
            int n;  cin >> n;
            for (int i=1; i<=n; ++i)    {
                cin >> a[i];
            }
            int m;  cin >> m;
            for (int i=1; i<=m; ++i)    {
                cin >> q[i];
            }
            BST *root = NULL;
            for (int i=1; i<=n; ++i)    {
                root = bst.insert (root, a[i]);
            }
            for (int i=1; i<=m; ++i)    {
                bst.find (root, q[i]);
                cout << endl;
            }
        }
    
        return 0;
    }
    

      

    编译人生,运行世界!
  • 相关阅读:
    【IDE_IntelliJ IDEA】idea主题设置
    【IDE_IntelliJ IDEA】idea中设置类和方法的注释模板
    【前端_css】RGB 常用颜色列表
    【IDE_IntelliJ IDEA】IDEA中使用Junit插件自动创建测试用例到test目录
    【DB_MySQL】MySQL日志分析
    【IDE_IntelliJ IDEA】IDEA 创建类注释模板和方法注释模板
    【前端_js】ES6原生提供的Promise 对象。
    【Java_基础】Java中强制类型转换
    【IDE_IntelliJ IDEA】在Intellij IDEA中使用Debug
    使用反射来编写实体类的XML
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4807643.html
Copyright © 2020-2023  润新知