Skip to content
On this page

d66_f1_map_k_range.cpp

cpp
#ifndef __STUDENT_H_
#define __STUDENT_H_

#include <vector>

#include "map_bst_lite.h"

template <typename KeyT, typename MappedT, typename CompareT>
void CP::map_bst<KeyT, MappedT, CompareT>::my_recur(
    node *n, const KeyT &a, const KeyT &b, std::vector<MappedT> &result) const {
    if (n == nullptr) {
        return;
    }

    if (mLess(a, n->data.first)) {
        my_recur(n->left, a, b, result);
    }

    if (!mLess(n->data.first, a) && !mLess(b, n->data.first)) {
        result.push_back(n->data.second);
    }

    if (mLess(n->data.first, b)) {
        my_recur(n->right, a, b, result);
    }
}

template <typename KeyT, typename MappedT, typename CompareT>
std::vector<MappedT> CP::map_bst<KeyT, MappedT, CompareT>::value_in_key_range(
    const KeyT &a, const KeyT &b) const {
    std::vector<MappedT> result;
    my_recur(mRoot, a, b, result);
    return result;
}

#endif

See on GitHub

Last Updated: 15/12/2566 22:53:58 (UTC+7)

Released under the MIT License