紅黑樹的是在排序而叉樹的基礎上加了如下約束:
1:每個節點或者是黑色,或者是紅色
2:根節點是黑色
3:如果乙個節點是紅色的,則它的子節點必須是黑色的
4:從乙個節點到任一葉子所有路徑上包含相同數目的黑節點
linux核心紅黑樹實現:
指向一顆紅黑樹:
struct rb_root
;節點結構:
struct rb_node
__attribute__((aligned(sizeof(long))));
插入乙個節點,然後紅黑樹結構會不符合定義,需要再呼叫rb_insert_color;
static inline void rb_link_node(struct rb_node * node, struct rb_node * parent,
struct rb_node ** rb_link)
紅黑樹的構造過程
新建乙個根節點:
struct rb_node root;struct rb_root ptree;
rb_link_node(&root, null, &ptree.rb_node);
插入乙個節點
先通過紅黑的排序二叉樹結構 找到新節點要插入的那個葉子節點,確定新節點的父節點
呼叫 rb_link_node( &node_9, &node_8, &(node_8.rb_right))
再呼叫rb_insert_color(&node_9, &node_root_10);
linux紅黑樹實現
linux核心紅黑樹的演算法都定義在linux 2.6.38.8 include linux rbtree.h和linux 2.6.38.8 lib rbtree.c兩個檔案中。1 結構體 cpp view plain copy print?struct rb node attribute alig...
linux紅黑樹解讀
1 紅黑樹的結構體解讀 struct rb node attribute aligned sizeof long 這個是linux核心紅黑樹的基礎結構,注意這裡的 attribute aligned sizeof long 如果是在32位機器上的話,那麼這個就是4位元組對齊,rb node的首位址必...
核心紅黑樹使用範例
核心中的紅黑樹只是提供了乙個管理機制,並沒有提供具體的使用介面。需要使用者根據自己的使用環境去定義和實現自己的關鍵字 char,uchar,int,uint等型別 操作。這樣可以更加靈活。像核心中的鍊錶,hash表的 都是這種思想。1 struct mytype 2 78 struct mytype...