二叉排序樹又稱二叉搜尋樹,滿足下列特徵:
typedef
struct bstnode bstnode;
//節點結構
bool
insertbst
(bstnode *
&bt,
int k)
else
if(bt-
>data == k)
return
false
;else
if(bt-
>data > k)
return
insertbst
(bt-
>left, k)
;else
return
insertbst
(bt-
>right, k)
;}
bstnode*
createbstree
(int a,
int n)
bstnode *
searchbst
(bstnode *bt,
int k)
5、刪除節點
/*
刪除節點過程分以下幾種情況
1、若p是葉子節點,直接刪除
2、若p節點只有左子樹而無右子樹,可用其左孩子節點代替p
3、若p節點只有右子樹而無左子樹,將其右孩子節點替代p
4、若p節點同時有左右子樹,選擇左子樹中最大的節點用其替代p,然後刪除左子樹最大的節點(第2種情況)
*/void
delete
(bstnode *
&bt)
;void
delete1
(bstnode *
&bt, bstnode *
&b);
bool
deletebst
(bstnode *
&bt,
int k)}}
void
delete
(bstnode *
&bt)
else
if(bt-
>right ==
nullptr
)else
}void
delete1
(bstnode *
&bt, bstnode *
&b)}
二叉排序樹
在複習資料結構,把這個東西總結一下。這種結構是動態查詢表,這種動態是相對靜態查詢 順序查詢,折半查詢,分塊查詢等 來說的。對於各種靜態鍊錶,要達到查詢複雜度為o logn 必須要求有序 而要使插入刪除複雜度為o 1 必須是鍊錶儲存。動態查詢表就可以同時滿足這兩者。動態查詢表的特點是表結構本身在查詢過...
二叉排序樹
name 二叉排序樹相關操作 author unimen date 2011 10 8 13 14 21 刪除結點比較麻煩,總結如下 4大種情況 1 結點p無右孩子 將該點的左孩子變為其在雙親中的同位孩子 1 p為其雙親的左孩子時將其的左孩子變為雙親的左孩子 2 p為其雙親的右孩子時將其的左孩子變為...
二叉排序樹
include include include include struct tree node void insert node struct tree node int void pre order struct tree node void in order struct tree node ...