資料結構 二叉搜尋樹的C 實現和優化測試

2021-10-05 19:02:15 字數 3370 閱讀 7774

私有成員變數

private

:struct node

node

(node* node)

//建構函式};

node* root;

//成員變數 根節點

int count;

//元素數量

公有成員函式(外界介面)

難點插入刪除

mybst()

~mybst()

// 前序遍歷

void

preorder()

// 中序遍歷

void

inorder()

// 後序遍歷

void

postorder()

//層序遍歷 通過構建佇列

void

levelorder()

}int

size()

bool

isempty()

bool

contain

(key key)

value*

search

(key key)

//遞迴 返回root*型別

void

insert

(key k, value v)

//遞迴 返回空指標

void

insert_3

(key k, value v)

//非遞迴 使用二級指標

void

insert_2

(key k, value v)

elseif(

(*tmp)

->key > k)

else}(

*tmp)

=new

node

(k, v)

;///return root;

}//非遞迴 一級指標 判斷父親節點(或者可以增加乙個臨時變數記錄父節點,沒有嘗試)

void

insert_4

(key k, value v)

elseif(

(tmp)

->key > k)

else

}else

else

tmp =

((tmp)

->right);}

} root =

newnode

(k, v);}

key minimum()

key maxmum()

void

removemin()

void

removekey

(key key)

私有成員函式

void

delete_root

(node* node)

delete_root

(node-

>left)

;delete_root

(node-

>right)

;delete node;

count--;}

void

preorder

(node* node)

void

postorder

(node* node)

void

inorder

(node* node)

bool

contain

(node* node, key key)

if(node-

>key == key)

else

if(node-

>key > key)

else

return

contain

(node-

>right, key);}

value*

search

(node* node, key key)

if(node-

>key == key)

else

if(node-

>key > key)

else

}//如果不這樣做的話 原始的數1-2-3 給3增加乙個節點 3-4 3-4和3對於2來說 是不一樣的節點 所以必須每個返回值都得是node* 改乙個每一層的子節點都發生了變化

node*

insert

(node* node, key k, value v)

//傳過來節點的值

if(node-

>key == k)

else

if(node-

>key < k)

else

return node;

}void

insert_3

(node*

& node, key k, value v)

if(node-

>key == k)

else

if(node-

>key < k)

else

} node*

minimum

(node* node)

return

minimum

(node-

>left);}

node*

maxmum

(node* node)

return

maxmum

(node-

>right);}

node*

removemin

(node* node)

node-

>left =

removemin

(node-

>left)

;//新節點代替原來的左節點

return node;

} node*

removemax

(node* node)

node-

>right =

removemax

(node-

>right)

;//新節點代替原來的右節點

return node;

} node*

removekey

(node* node,key key)

if(node-

>key > key)

else

if(node-

>key < key)

else

else

if(node-

>right ==

null

)else

}}

二叉搜尋樹c 資料結構二叉搜尋樹

在n個動態的整數中搜尋某個整數?檢視其是否存在 假設使用動態陣列存放元素,從第 0 個位置開始遍歷搜尋,平均時間複雜度 o n 如果維護乙個有序的動態陣列,使用二分搜尋,最壞時間複雜度 o logn 但是新增 刪除的平均時間複雜度是 o n 針對這個需求,有沒有更好的方案?今天我們主要講的就是二叉搜...

資料結構(二叉搜尋樹)

二叉搜尋樹是一種可以高效完成以下操作的樹型的資料結構 插入乙個值 查詢是否含有某個值 刪除某個值 它儲存節點的資料資訊時,遵循以下規則,左子樹的值 根節點值 右子樹的值 下面是基本的二叉搜尋樹的實現 include include include includeusing namespace std...

資料結構 二叉搜尋樹

二叉搜尋樹的所有節點都滿足左子樹上的所有節點都比自己小,而右子樹上的所有節點都比自己大這一條件。當刪除某個節點時,需要根據下面幾種情況分別進行處理 需要刪除的節點沒有左兒子,那麼就把右兒子提上去。需要刪除的節點的左兒子沒有右兒子,那麼就把左兒子提上去。以上兩種情況都不滿足的話,就把左兒子的子孫 左子...