lintcode 11. 二叉查找樹中搜索區間
阿新 • • 發佈:2018-01-18
了解 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. 二叉查找樹中搜索區間