Exemplo n.º 1
0
node* __find_node_p (node* root, int data, node** parent) {
	if (!root)
		return root;
	if (!root || data == root->data)
		return root;
	return data < root->data ? __find_node(root->lchild, data) : __find_node(root->rchild, data);
}
Exemplo n.º 2
0
	bool predecessor(const key_type& key, key_type* p) {
		rb_tree_node* pos = __find_node(key);
		if (!__isnil(pos) && !__isnil(pos = __predecessor(pos))) {
			if (p != nullptr)
				*p = pos->value.first;
			return true;
		}

		return false;
	}
Exemplo n.º 3
0
	bool erase(const key_type& key) {
		rb_tree_node* pos = __find_node(key);
		if (__isnil(pos))
			return false;
		rb_erase_result result = __bst_erase(pos);
		// tree above garbage is legal.
		if (result.first->color == black)
			__rb_erase_fixup(result.second);

		delete result.first;
		return true;
	}
Exemplo n.º 4
0
	bool contains(const key_type& key) const {
		return !__isnil(__find_node(key));
	}
Exemplo n.º 5
0
node* find_node(bintree* tree, int data, node** parent) {
	return __find_node(tree->root, data, parent);
}
Exemplo n.º 6
0
node* __find_node (node* root, int data) {
	if (!root || data == root->data)
		return root;
	return data < root->data ? __find_node(root->lchild, data) : __find_node(root->rchild, data);
}