演算法10 二叉搜尋樹存在重複資料插入的實現

2022-05-23 05:39:09 字數 2651 閱讀 8761

當用tree-insert將n個具有相同關鍵字的資料項插入到一棵初始為空的二叉查詢樹中時,該演算法的漸近效能如何?

我們可以對tree-insert做一些改進,即在第5行的前面測試key[z] = key[x],在第11行的前面測試key[z] = key[y]。如果等式成立,我們對下列策略中的某一種加以實現。對每一種策略,請給出將n個具有相同關鍵字的資料插入一棵初始為空的二叉查詢樹中的漸近效能(以下的策略是針對第5行的,比較的是z和x的關鍵字。將x換成y即可用於第11行)。

b)在結點x處設乙個布林標誌b[x],並根據b[x]的不同值,置x為left[x]或right[x]。每當插入乙個與x具有相同關鍵字的結點時,b[x]取true或false。

c)在結點x處設定乙個列表,其中所有結點都具有與x相同的關鍵字,並將z插入到該列表中。

d)隨機地將置為left[x]或right[x]

思考:b)每次測試到等式成立時,若b[x]為flase,插入到左子樹中,b[x]為true時,插入到右子樹中,然後將b[x]取反。

c)使用乙個鍊錶,所有具有相同關鍵字的結點組成乙個鍊錶,結點中的乙個指標指向這個鍊錶。

d)使用rand()%2隨機地決定插入到左子樹中還是右子樹中。

**實現如下;首先是b方法

1

//二叉查詢樹結點的結構

2struct

node

3; //

初始化11

};12

//二叉查詢樹的結構

13struct

tree

14//

都是初始化的方法

17};

18//

二叉查詢樹的插入

19void tree_insert(tree *t, node *z)

2037

else

if(z->key < x->key)

38 x = x->left;

39else

40 x = x->right;41}

42//

修改指標,注意樹為空的情況

43 z->p =y;

44if(y ==null)

45 t->root =z;

46else

if(z->key == y->key)

4753

else

if(z->key < y->key)

54 y->left =z;

55else y->right =z;

56 }

c方法**實現如下

1

//二叉查詢樹結點的結構

2struct

node311

};12

//二叉查詢樹的結構

13struct

tree

1417

};18

//二叉查詢樹的插入

19void tree_insert(tree *t, node *z)

2034

else

if(z->key < x->key)

35 x = x->left;

36else

37 x = x->right;38}

39//

修改指標,注意樹為空的情況

40 z->p =y;

41if(y ==null)

42 t->root =z;

43//

等式成立時,不是插入到子樹中,而是鏈入鍊錶中

44else

if(z->key == y->key)

4549

else

if(z->key < y->key)

50 y->left =z;

51else y->right =z;

52 }

d方法實現如下

1

//二叉查詢樹結點的結構

2struct

node310

};11

//二叉查詢樹的結構

12struct

tree

1316

};17

//二叉查詢樹的插入

18void tree_insert(tree *t, node *z)

1934

else

if(z->key < x->key)

35 x = x->left;

36else

37 x = x->right;38}

39//

修改指標,注意樹為空的情況

40 z->p =y;

41if(y ==null)

42 t->root =z;

43else

if(z->key == y->key)

4450

else

if(z->key < y->key)

51 y->left =z;

52else y->right =z;

53 }

二叉搜尋樹(包含重複資料)的C 實現

由這個修改 二叉搜尋樹的c 實現 qq 32523711的部落格 csdn部落格 刪除的時候我是遞迴刪除的 感覺有點偷懶 二叉搜尋樹結點型別 templatestruct bstnode bstnode const t d,bstnode l null,bstnode r null data d l...

演算法10 二叉搜尋樹之基數樹

基數樹是用來儲存和排列字串,關於字典序有兩條規則 演算法導論中給出這樣的圖,我們結合圖來看 1.當字串長度相同時,從左向右逐個字元比較,左邊的比右邊的小。如011 100。2.字串長度不同時,長度長的在字典序中值更大。如100 1011。因此,根結點 左子樹結點 右子樹結點 所以我們會用到先序遍歷 ...

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...