核心中的紅黑樹只是提供了乙個管理機制,並沒有提供具體的使用介面。需要使用者根據自己的使用環境去定義和實現自己的關鍵字(char,uchar, int, uint等型別)操作。這樣可以更加靈活。
像核心中的鍊錶,hash表的**都是這種思想。
1struct
mytype
2; 78
struct mytype *my_find(struct rb_root *root, int
num) 9
2223
return
null;
24}
2526
27int my_insert(struct rb_root *root, struct mytype *data)
28
4445
/*add new node and rebalance tree.
*/46 rb_link_node(&data->my_node, parent, tmp);
47 rb_insert_color(&data->my_node, root);
4849
return
0;
50}
5152
53void my_delete(struct rb_root *root, int
num)
5461
} 62
63void my_destory(struct rb_root *tree)
6471}72
73void my_printf(struct rb_root *tree)
7481
82 printf("\n"
);
83}
8485
86#define rbtree_max_num 10
8788
int main(int argc, char *argv)
89104
105 tmp->num = rand()%100
;106
107 printf("
%d ", tmp->num);
108109
int ret = my_insert(&mytree, tmp);
110if (ret < 0
) 111
115}
116117 printf("\n"
);118
119 my_printf(&mytree);
120121
char buf[10
];122
123while(1
)124
137else
if(buf[0] == '+'
)138
145146 tmp->num = atoi(&buf[1
]);147
148int ret = my_insert(&mytree, tmp);
149if (ret < 0
) 150
154}
155else
if(buf[0] == '-'
)156
159else
160163
164 my_printf(&mytree);
165166
}167
168 my_destory(&mytree);
169170
return
0;
171 }
紅黑樹核心原理
紅黑樹是一種近似平衡的二叉查詢樹,它能夠確保任何乙個節點的左右子樹的高度差不會超過二者中較低那個的一陪。具體來說,紅黑樹是滿足如下條件的二叉查詢樹 binary search tree 每個節點要麼是紅色,要麼是黑色。根節點必須是黑色 紅色節點不能連續 也即是,紅色節點的孩子和父親都不能是紅色 對於...
linux紅黑樹使用
紅黑樹的是在排序而叉樹的基礎上加了如下約束 1 每個節點或者是黑色,或者是紅色 2 根節點是黑色 3 如果乙個節點是紅色的,則它的子節點必須是黑色的 4 從乙個節點到任一葉子所有路徑上包含相同數目的黑節點 linux核心紅黑樹實現 指向一顆紅黑樹 struct rb root 節點結構 struct...
Linux 核心中的紅黑樹
紅黑樹是平衡二叉樹的一種,它有很好的性質,樹中的結點都是有序的,而且因為它本身就是平衡的,所以查詢也不會出現非常惡劣的情況,基於二叉樹的操作的時間複雜度是o log n linux 核心在管理vm area struct 時就是採用了紅黑樹來維護記憶體塊的。先到include linux rbtre...