二叉搜尋樹的隨機化插入和伸展插入操作(平攤法)

2021-09-07 11:27:32 字數 1158 閱讀 7557

原始碼例如以下:

#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...