zoukankan      html  css  js  c++  java
  • lintcode 11. 二叉查找树中搜索区间

    class Solution {
    public:
        vector<int> res;
        int k11,k22;
        static bool comp(const int &a,const int &b)
        {
            return a<b;
        }
        /*
         * @param root: param root: The root of the binary search tree
         * @param k1: An integer
         * @param k2: An integer
         * @return: return: Return all keys that k1<=key<=k2 in ascending order
         */
        vector<int> searchRange(TreeNode * root, int k1, int k2) {
            // write your code here
            k11=k1;
            k22=k2;
            dfs(root);
            sort(res.begin(),res.end(),comp);
            return res;
        }
        
        void dfs(TreeNode *node){
            if(node == NULL)
                return;
            
            if(node->val <= k22 && node->val >= k11){
                res.push_back(node->val);
            }
            dfs(node->left);
            dfs(node->right);
        }
    };

    这个题目也是挺简单的,不过这里用到了对vector的排序。

    会发现是直接传入开头和结尾的,然后进一步去了解一下其中的原理:

    vector采用的数据结构很简单:线性的连续空间。

    它以两个迭代器start和finish分别指向配置得来的连续空间中目前已经被使用的空间。迭代器end_of_storage指向整个连续空间的尾部。

    另外对于vector这里是常用的函数(来源百度):

    • 1.push_back   在数组的最后添加一个数据
    • 2.pop_back    去掉数组的最后一个数据 
    • 3.at                得到编号位置的数据
    • 4.begin           得到数组头的指针
    • 5.end             得到数组的最后一个单元+1的指针
    • 6.front        得到数组头的引用
    • 7.back            得到数组的最后一个单元的引用
    • 8.max_size     得到vector最大可以是多大
    • 9.capacity       当前vector分配的大小
    • 10.size           当前使用数据的大小
    • 11.resize         改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
    • 12.reserve      改变当前vecotr所分配空间的大小
    • 13.erase         删除指针指向的数据项
    • 14.clear          清空当前的vector
    • 15.rbegin        将vector反转后的开始指针返回(其实就是原来的end-1)
    • 16.rend          将vector反转构的结束指针返回(其实就是原来的begin-1)
    • 17.empty        判断vector是否为空
    • 18.swap         与另一个vector交换数据
  • 相关阅读:
    14_java之变量|参数|返回值|修饰符
    NYOJ 202 红黑树 (二叉树)
    NYOJ 138 找球号(二) (哈希)
    NYOJ 136 等式 (哈希)
    NYOJ 133 子序列 (离散化)
    NYOJ 129 树的判定 (并查集)
    NYOJ 117 求逆序数 (树状数组)
    NYOJ 93 汉诺塔 (数学)
    HDU 2050 折线分割平面 (数学)
    天梯赛L2-008 最长对称子串 (字符串处理)
  • 原文地址:https://www.cnblogs.com/rimochiko/p/8309380.html
Copyright © 2011-2022 走看看