私有成員變數
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...
資料結構 二叉搜尋樹
二叉搜尋樹的所有節點都滿足左子樹上的所有節點都比自己小,而右子樹上的所有節點都比自己大這一條件。當刪除某個節點時,需要根據下面幾種情況分別進行處理 需要刪除的節點沒有左兒子,那麼就把右兒子提上去。需要刪除的節點的左兒子沒有右兒子,那麼就把左兒子提上去。以上兩種情況都不滿足的話,就把左兒子的子孫 左子...