9template <
class T,
class Compare = std::less<T>>
16 avl() : tree(nullptr), node_num(0), comp(Compare()) {}
20 bool empty()
const {
return node_num == 0; }
25 if (tree ==
nullptr)
return false;
26 return tree->find(value, comp);
31 tree =
new node(value);
33 tree->insert(value, comp);
39 if (tree) tree->erase(x, comp);
51 node(
const value_type& x) : value(x), left(nullptr), right(nullptr), bf(0) {}
67template <
class T,
class Compare>
68bool avl<T, Compare>::node::find(
const value_type& x,
const Compare& comp)
const {
69 if (!comp(value, x) && !comp(x, value))
return true;
70 if (comp(x, value) && left !=
nullptr)
return left->find(x, comp);
71 if (comp(value, x) && right !=
nullptr)
return right->find(x, comp);
75template <
class T,
class Compare>
76void avl<T, Compare>::node::insert(
const value_type& x,
const Compare& comp) {
78 if (left ==
nullptr) {
82 left->insert(x, comp);
85 if (right ==
nullptr) {
89 right->insert(x, comp);
96template <
class T,
class Compare>
99template <
class T,
class Compare>
100void avl<T, Compare>::node::update() {}
size_type size() const
Definition: avl.h:22
void insert(const value_type &value)
Definition: avl.h:29
void clear()
Definition: avl.h:42
T value_type
Definition: avl.h:12
void erase(const value_type &x)
Definition: avl.h:38
std::size_t size_type
Definition: avl.h:13
avl()
Definition: avl.h:16
std::ptrdiff_t difference_type
Definition: avl.h:14
bool empty() const
Definition: avl.h:20
bool find(const value_type &value) const
Definition: avl.h:24
~avl()
Definition: avl.h:18
Definition: algorithm.h:10
void erase(std::vector< T > &v, const std::set< size_t > &idx)
Erases the specified elements from v, according to index in idx.
Definition: algorithm.h:14