C语言实现线索二叉树

线索二叉树节点结构:

typedef struct bstree_node bstree_node_t;
struct bstree_node {

    uintptr_t left, right;

} __attribute__((aligned(2)));

使用时将该结构体嵌入用户结构体即可:

struct leaf {

    int key;

    struct bstree_node node;

};

取得线索与指向普通叶子节点指针的方法:

static inline void _bstree_set_thread(bstree_node_t *t, uintptr_t *p)

{

    *p = (uintptr_t) t | 1;

}

static inline bstree_node_t *_bstree_get_thread(uintptr_t u)

{

    return (bstree_node_t *) ((u & -(int) (u & 1)) & ~1UL);

}

static inline void _bstree_set_link(bstree_node_t *n, uintptr_t *p)

{

    *p = (uintptr_t) n;

}

static inline bstree_node_t *_bstree_get_link(uintptr_t u)

{

    return (bstree_node_t *) (u & ((int) (u & 1) - 1));

}

我认为与__attribute__((aligned(2)));有关,
该怎么理解这段代码?

阅读 617
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题