原始碼例如以下:
#include #include //#define key int
#define hl h->l
#define hr h->r
#define hlr h->l->r
#define hll h->l->l
#define hrr h->r->r
#define hrl h->r->l
typedef int key;
struct item;
typedef struct stnode* link;
struct stnode;
static link head , z ;
static struct item nullitem ;
key key(item item)
//建立乙個節點
link new(item item, link l,link r, int n) //初始化 void stinit() //右旋轉 順時針旋轉 link rotr(link h) //左旋轉 逆時針旋轉 link rotl(link h) //根插入程式 link insertt(link h, item item) else (h->n)++;return h; } //隨機化插入程式 link insertr(link h, item item) else (h->n)++;return h; } //伸展插入 link splay(link h, item item) else return rotr(h); } else else return rotl(h); } } //bst插入主程式 void stinsert(item item) void sortr(link h) //二叉搜尋樹排序 void stsort(link h) void test(); struct item item2 = ; struct item item3 = ; struct item item4 = ; struct item item5 = ; struct item item6 = ; struct item item7 = ; stinit(); stinsert(item1);stinsert(item2); stinsert(item3);stinsert(item4); stinsert(item5);stinsert(item6); stinsert(item7); stsort(head); } main()
二叉搜尋樹的插入和刪除
include include using namespace std typedef struct nodenode,pnode void binary tree insert pnode pn,pnode pz 二叉樹插入操作 else pz parent y if y null else if...
二叉搜尋樹的插入和刪除
二叉搜尋樹的插入和刪除。bintree insert elementtype x,bintree bst 二叉搜尋樹的插入演算法 else 開始找要插入元素的位置 if xdata bst left insert x,bst left 遞迴插入左子樹 else if x bst data bst r...
隨機二叉搜尋樹 Treap
當個日記記錄treap這一結構,詳細參見http www.nocow.cn index.php treap,在這裡我著重講一下旋轉 treap,它其它就是乙個二叉查詢樹 bst 堆 heap 它的資料有兩個 關鍵值 key 優先順序 fix 用struct表示treap的結點的結構如下 struct...