二叉搜索树上的范围查询(递归)

时间:2012-12-05 01:54:43

标签: c++ recursion vector range binary-search-tree

我被要求根据模板编写一些代码,该模板将返回范围查询中的键向量(即[x,y]中的所有键)。跟我一起,我对递归也很新。

template <typename Key, typename Value>
vector<<BSTNode<Key, Value>*> range_query(BSTNode<Key, Value>* root,Key key1,Key key2) {

vector<BSTNode<Key, Value>*> found;
if(key1 > key2) return found;

while(root != NULL){
    range_query(root->left,key1,key2);
    range_query(root->right,key1,key2);
    if(root->key >= key1 && root->key <= key2) found.push_back(root);
}

由于我假设顺序在向量中无关紧要,这是否是在向量中遍历和存储键的正确方法?另外,如何在递归结束时返回完成的向量?

1 个答案:

答案 0 :(得分:1)

传入参数(对向量的引用)并在函数内部更新:

template <typename Key, typename Value>
void range_query(BSTNode<Key, Value>* root, Key key1, Key key2, vector<<BSTNode<Key, Value>*>& found) 
{
    if (!root) return;
    if(key1 > key2) return;

    range_query(root->left,key1,key2,found);
    range_query(root->right,key1,key2,found);

    if(root->key >= key1 && root->key <= key2) 
        found.push_back(root);
    }
} 

我稍微修改了你的代码。