1. 程式人生 > >演算法導論中紅黑樹插入演算法的C+實現及優化改進

演算法導論中紅黑樹插入演算法的C+實現及優化改進

之前在上到算導的紅黑樹插入時,突然冒出個想法,下課的時候找徐教授交流,由於當時也沒想透徹加上表述不清,就沒深入下去。恰巧實驗課要做紅黑樹插入的實現,於是整理了一番,記錄於此以備以後檢視。

由於C++水平太菜,程式碼基本用C實現,用到了一些C++的新特性。

首先是結點的資料結構,一共5個,分別是資料、顏色、指向左右孩子和父結點的指標,具體程式碼如下

typedef struct rb_node {
	elemtype data;
	bool color;//紅色為true,黑色為false 
	struct rb_node* left;
	struct rb_node* right;
	struct rb_node* parent;
} Node, *rbTree;

接著是書上虛擬碼的實現,一共四個函式:LEFT-ROTATE(T,x),RIGHT_ROTATE(T,y),RB_INSERT(T,z),RB_INSERT_FIXUP(T,z)