2

範囲クエリ ([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);
}

ベクター内では順序は重要ではないと想定しているので、これはベクター内のキーをトラバースして保存する正しい方法でしょうか? また、再帰の最後に完成したベクトルを返すにはどうすればよいですか?

4

1 に答える 1

1

パラメーター ( vector への参照) として渡し、関数内で更新します。

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);
    }
} 

コードを少し変更しました。

于 2012-12-05T02:06:22.523 に答える