LiteCode-Search Range in Binary Search Tree

本文介绍了一种在二叉搜索树中查找指定区间内所有元素的算法,通过广度优先搜索实现,确保了返回结果的升序排列。适用于需要在二叉树中快速查找特定范围元素的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

Given a binary search tree and a range [k1, k2], return all elements in the given range.

Example

If k1 = 10 and k2 = 22, then your function should return [12, 20, 22].

    20
   /  \
  8   22
 / \
4   12
  • 题目模板

    /**
    * Definition of TreeNode:
    * class TreeNode {
    * public:
    *     int val;
    *     TreeNode *left, *right;
    *     TreeNode(int val) {
    *         this->val = val;
    *         this->left = this->right = NULL;
    *     }
    * }
    */
    
    class Solution {
    public:
      /**
       * @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
      }
    };
    
  • 题目大意

    给你一个二叉搜索树,和两个数k1,k2,让你输出在数中值介于这两个数的数。

  • 大概思路

    没啥好说的,遍历书吧,深搜广搜都可以。

    /**
    * Definition of TreeNode:
    * class TreeNode {
    * public:
    *     int val;
    *     TreeNode *left, *right;
    *     TreeNode(int val) {
    *         this->val = val;
    *         this->left = this->right = NULL;
    *     }
    * }
    */
    
    class Solution {
    public:
      /**
       * @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
          queue<TreeNode*> q;
          vector<int> v;
          if(!root)
            return v;
    
          q.push(root);
          while(!q.empty()){
            TreeNode *t = q.front();
            q.pop();
            if(t->val >= k1 && t->val <= k2)
              v.push_back(t->val);
            if(t->left)
              q.push(t->left);
            if(t->right)
              q.push(t->right);
          }
          return v;
      }
    };
    
  • 细节方面

    注意树可能为空直接返回空vector就可以了。

  • 题目链接: https://www.lintcode.com/problem/search-range-in-binary-search-tree/description

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值