11. 二叉查找树中搜索区间
给定一个二叉查找树和范围
[k1, k2]
。按照升序返回给定范围内的节点值。样例 1:
输入:{5},6,10 输出:[] 5 它将被序列化为 {5} 没有数字介于6和10之间
样例 2:
输入:{20,8,22,4,12},10,22 输出:[12,20,22] 解释: 20 / \ 8 22 / \ 4 12 它将被序列化为 {20,8,22,4,12} [12,20,22]介于10和22之间
/**
* 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:
vector<int> ans;
void dfs(TreeNode* node, int k1, int k2) {
if (node->left && node->val>=k1)
dfs(node->left, k1, k2);
if (node->val >= k1 && node->val <= k2)
ans.push_back(node->val);
if (node->right && node->val<=k2)
dfs(node->right, k1, k2);
}
vector<int> searchRange(TreeNode* root, int k1, int k2) {
// write your code here
if (root==NULL)
return ans;
dfs(root, k1, k2);
return ans;
}
};