基本資料結構 二叉搜尋樹(C 實現)

2022-01-19 01:02:25 字數 1205 閱讀 6085

目錄測試**

參考資料

二叉搜尋樹(英語:binary search tree),(又:二叉搜尋樹,二叉排序樹)它或者是一棵空樹,或者是具有下列性質的二叉樹:

如圖所示:

所有的節點,都滿足左子樹上的所有節點都比自己的小,而右子樹上的所有節點都比自己大這個條件。

因為二叉搜尋樹的性質,二叉搜尋樹能夠高效地進行如下操作:

如果共有n個元素,那麼平均每次操作需要o(logn)的時間。

接下來用c++來實現以上操作。首先定義節點結構體如下:

node* insert(node* p,int x)

else

}

如圖所示:

node* insert(node* p,int x)

else

}

如圖所示:

bool find(node* p,int x)

數值的刪除比起之前提到的操作要稍微麻煩一些。例如,我們要刪除數值15。如果刪除了15所在的節點,那麼它的兩個兒子10和17就懸空了。於是,把11提到15所在的位置就可以解決問題。如圖所示:

一般來說,需要根據下面幾種情況分別進行處理:

node* remove(node* p,int x)

else if(p->lch->rch == null) //需要刪除的節點的左兒子沒有右兒子

else

return p;

}}

#include#include#includeusing namespace std;

struct node

}; node* insert(node* p,int x)

else }

bool find(node* p,int x)

node* remove(node* p,int x)

else if(p->lch->rch == null) //需要刪除的節點的左兒子沒有右兒子

else

return p; }}

void printtree(node* root) }

cout << endl;

}int main() ;

結果:

二叉搜尋樹基本資料結構實現

二叉搜尋樹中乙個結點包含3個指標left,right,prev和乙個衛星資料key。這三個指標分別指向左兒子,右兒子,父節點。如果孩子結點和父親結點不存在,相應指標為空。根結點的prev指向空。1 遍歷 中序遍歷,先序遍歷,後續遍歷 2 查詢乙個關鍵字,返回該關鍵字的結點指標 3 返回最大關鍵字最小...

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

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

基本資料結構 二叉樹(binary tree)

基本資料結構 二叉樹 binary tree c 二叉樹首先是一棵樹,每個節點都不能有多於兩個的兒子,也就是樹的度不能超過2。二叉樹的兩個兒子分別稱為 左兒子 和 右兒子 次序不能顛倒。如圖1是乙個簡單的二叉樹。二叉樹的種類 一種是滿二叉樹,除了最後一層的葉子節點外,每一層的節點都必須有兩個兒子節點...