【发布时间】:2013-04-23 20:22:24
【问题描述】:
在维基百科中:Red-black_tree
跟踪每个节点的颜色只需要每个节点的 1 位信息,因为只有两种颜色。该树不包含任何其他特定于它是红->黑树的数据,因此它的内存占用几乎与经典(未着色)二叉搜索>树相同。在许多情况下,额外的信息位可以存储而无需额外的内存>成本。
我在 C 中找到了 rbtree 的实现:
#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
我的问题是这个颜色技巧是如何工作的?谢谢。
【问题讨论】:
-
你问的是bit twiddling吗?
标签: c red-black-tree