實現演算法導論第三版中的BTree

2021-07-22 14:11:00 字數 2077 閱讀 4752

只實現了插入、查詢演算法,未實現刪除演算法。

#include #include #include #define btreekey char

#define t 2 //minmum degree

#define true 1

#define false 0

struct btree

;struct btreenode

;struct btreeresult

;void btreecreate(struct btree * tree)

struct btreenode * btreeread(struct btreenode * node, int subtreeindex)

struct btreeresult btreesearch(struct btreenode * node, btreekey k)

; //todo:optimize

return res;

}else if(node->bleaf)

;return res;

}else

struct btreeresult res=;

return res;

}//subtreeindex 滿節點的索引位置

void btreesplitchild(btreenode * panode, int subtreeindex)

//將fullnode中後半部分的子節點賦給newnode

if(!fullnode->bleaf)

}fullnode->n = t - 1;

//父節點subtreeindex之後的節點 向後移動

for(int j=panode->n; j>subtreeindex; j++)

panode->subtree[subtreeindex+1] = newnode; //將新生成的子節點填入父節點中

for(int j=panode->n-1; jkeys[j+1] = panode->keys[j];

}panode->keys[subtreeindex] = fullnode->keys[t-1];

panode->n++;

//diskwrite(fullnode)

//diskwrite(newnode)

//diskwrite(panode)

}void btreeinsertnonfull(struct btreenode * node, btreekey k)

node->keys[i+1] = k;

node->n++;

//diskwrite(node)

}else

btreeinsertnonfull(node->subtree[i], k);

}}void btreeinsert(struct btree * tree, btreekey k)

else

}void printtree(int kind, btreenode * proot); //列印樹的關鍵字

int main()

///#include#include#includeusing namespace std;

/* * 1 means integer

* 2 means character

*///printtree from

void printtree(int kind, btreenode * proot) //列印樹的關鍵字

cout << "]";

if(!temp->bleaf)

for(int i = 0;i n+1;i++)

nextlevel.push(temp->subtree[i]);

}cout << endl;

depth++;

myqueue = nextlevel;

}}

輸出結果

c btree 

depth : 0

[h ]

depth : 1

[c f ][n t ]

depth : 2

[a ][d e ][g ][k l m ][q ][w z ]

演算法導論第三版習題5 2

正好僱傭一次說明第一次僱傭的就是所有應聘者中最好的,所以概率為1n 正好僱傭 n 次說明所有應聘者按優秀從低到高依次出現,第一位是最差的,概率為1n 第二位其次,概率為1n 1,所以整體概率為1n 正好僱傭兩次,說明第乙個應聘者不是最好的,概率為n 1n,第二個應聘者是最好的,概率為1n 1,所以概...

演算法導論第三版習題5 3

在進入迴圈前,先將在整個陣列中隨機選擇乙個數至於a 1 即可 permute in place a 1 n a.length 2 swap a 1 with a random 1,n 3 for i 2 to n 4 swap a i with a random i,n 第二步其概率為1n 後面一樣...

演算法導論第三版習題6 3

a a.leng th 9 故從i a.l engt h 2 4開始呼叫max heapify a,i a 4 9 8 故交換a 4 和a 8 得到新的序列a1 b 接下來呼叫max heapify a,3 a 7 3 6 故交換a 3 和a 6 得到a2 c 第三步呼叫max heapify a,...