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交换数据

原文地址:https://www.cnblogs.com/rimochiko/p/8309380.html

时间: 2024-10-03 15:24:37

lintcode 11. 二叉查找树中搜索区间的相关文章

LintCode 11 二叉查找树的搜索区间

题目链接:http://www.lintcode.com/zh-cn/problem/search-range-in-binary-search-tree/ 1.描述 给定两个值 k1 和 k2(k1 < k2)和一个二叉查找树的根节点.找到树中所有值在 k1 到 k2 范围内的节点.即打印所有x (k1 <= x <= k2) 其中 x 是二叉查找树的中的节点值.返回所有升序的节点值. 2.样例 3.思路分析 要充分利用二叉查找树的特性:左小右大和中序遍历就是一个有序序列. 借助一个栈

[CareerCup] 11.3 Search in Rotated Sorted Array 在旋转有序矩阵中搜索

11.3 Given a sorted array of n integers that has been rotated an unknown number of times, write code to find an element in the array. You may assume that the array was originally sorted in increasing order. EXAMPLE Input: find 5 in {15, 16, 19, 20, 2

lintcode 容易题:Insert Node in a Binary Search Tree 在二叉查找树中插入节点

题目:  在二叉查找树中插入节点 给定一棵二叉查找树和一个新的树节点,将节点插入到树中. 你需要保证该树仍然是一棵二叉查找树.  样例 给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 挑战 能否不使用递归? 解题: 递归的方法比较简单 Java程序: /** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public

LintCode(85)在二叉查找树中插入节点

题目 在二叉查找树中插入节点 给定一棵二叉查找树和一个新的树节点,将节点插入到树中. 你需要保证该树仍然是一棵二叉查找树. 样例 给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 2 2 / \ / 1 4 --> 1 4 / / \ 3 3 6 分析 递归和非递归两种方法实现. Python代码 """ Definition of TreeNode: class TreeNode: def __init__(self, val): self.val

搜索区间

搜索区间 给定一个包含 n 个整数的排序数组,找出给定目标值 target 的起始和结束位置. 如果目标值不在数组中,则返回[-1, -1] 样例 给出[5, 7, 7, 8, 8, 10]和目标值target=8, 返回[3, 4] 挑战 时间复杂度 O(log n) 标签 数组 排序数组 二分法 1 class Solution { 2 /** 3 *@param A : an integer sorted array 4 *@param target : an integer to be

【LeetCode-面试算法经典-Java实现】【033-Search in Rotated Sorted Array(在旋转数组中搜索)】

[033-Search in Rotated Sorted Array(在旋转数组中搜索)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search.

有序二维数组中搜索特定的数

关于二维有序数组中搜索,其题目如下: 给定一个矩阵,都是整数,每一行从左到右升序,每一列从上到下有序,例如下面的矩阵 [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] 请用最快的时间找出特定的数,例如,输入3,存在这个数,输入15,不存在这个数. 实现如下的函数bool FindArray(int *pArray,int nWidth,int nheight,int nKey). 最笨的方法是逐个遍历进行比较,如果是这样,这题目就没什么意义

C++11标准中常用到的各种算法汇总.

在C++11标准中定义了很多算法,这些算法可以让我们很方便的操作各种容器和数组,这里要注意一下,这些算法操作的并非容器,而是迭代器,然后通过迭代器来操作容器中的数据,算法本身并不会关注容器中保存的数据的类型. 以下是我对常识的算法的总结,这些算法大部分都在algorithm.h中,还有一些在numeric.h中. 这里我们的容器都用这几个: vector<string> vec; vector<int> vec1; vec<string> vec2; 1.find();

JS二分法查找数值在数值中的区间

需求:求一个数字类型,在一个数组中的区间: 1 $(function(){ 2 //二分法计算最近的数组下标 3 Array.prototype.binarySearch = function(obj){ 4 //var value = 0; 5 var left = 0; 6 var right = this.length; 7 while(left <= right){ 8 var center = Math.floor((left+right)/2); 9 if(obj<this[cen