1. 程式人生 > >lintcode 11. 二叉查找樹中搜索區間

lintcode 11. 二叉查找樹中搜索區間

了解 hat 叠代器 tar post ger size 百度 開頭

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交換數據

lintcode 11. 二叉查找樹中搜索區間