В википедии: Red-black_treeКак работает трюк RBTree?
Отслеживание цвет каждого узла требуется только 1 бит информации на узел, потому что там> имеют только два цвета. Дерево не содержит никаких других данных, специфичных для того, чтобы быть красным -> черным деревом, поэтому его объем памяти почти идентичен классическому (неокрашенному) двоичному поисковому дереву. Во многих случаях дополнительный бит информации может храниться без дополнительной памяти> стоимости.
И я нашел орудие rbtree в C:
#ifdef UINTPTR_MAX
static inline enum rb_color get_color(const struct rbtree_node *node)
{
return node->parent & 1;
}
static inline void set_color(enum rb_color color, struct rbtree_node *node)
{
node->parent = (node->parent & ~1UL) | color;
}
static inline struct rbtree_node *get_parent(const struct rbtree_node *node)
{
return (struct rbtree_node *)(node->parent & ~1UL);
}
static inline void set_parent(struct rbtree_node *parent, struct rbtree_node *node)
{
node->parent = (uintptr_t)parent | (node->parent & 1);
}
#else
...
#endif
Мой вопрос заключается в том, как работает этот цвет трюк Thx?.
Вы спрашиваете о [бит-сплетении] (http://en.wikipedia.org/wiki/Bit_manipulation)? – chrisaycock