首先定義二叉樹的儲存結構
1二叉排序樹的查詢函式實現如下:/*二叉樹的二叉鍊錶結點結構定義
*/2 typedef char
treeelemtype;
3 typedef struct
tagbitreenode bitrnode, *bitrnodeptr;
1/*2在實現了查詢的基礎上,我們可以實現二叉查詢樹的插入(構造)函式:** @brief 二叉排序樹查詢的遞迴實現
3** @param
4** @arg root : 根結點
5** @arg key : 待查詢的關鍵字
6** @arg parent: root節點的雙親結點,初始值為null
7** @arg result: 查詢結果中找到的結點指標
8** @retval 如果查詢成功,則result指向該元素結點並返回1;
9** 如果失敗,則result指向查詢路徑上訪問的最後乙個節點。
10*/
11int bst_search(bitrnodeptr root, treeelemtype key, bitrnodeptr parent, bitrnodeptr *result)
1217
if (key == root->data)else
if (key < root->data)else
25 }
1/*2為了驗證,我們可以實現二叉樹的中序遍歷:** @brief 二叉排序樹的插入
3** @retval 當二叉樹root中不存在關鍵字等於key的資料元素時,
4** 插入key並返回1;否則直接返回05*/
6int bst_insert(bitrnodeptr *root, treeelemtype key)
7else
if (key < result->data)else
2122
return
1;//
插入成功
23 }else
26 }
1/*2二叉排序樹的刪除操作相對複雜一點,**如下:** 中序遍歷二叉排序樹3*/
4void bst_tr**erse(bitrnodeptr root, void (*visit)(bitrnodeptr))
5
1/*2最後給一段測試**:** 從二叉排序樹中刪除結點p,並重接它的左子樹或右子樹3*/
4int deletenode(bitrnodeptr *p)
5else
if ((*p)->lchild == null)else
22//
找到p的直接前驅s
23 (*p)->data = s->data;//
用s的值替代待刪除結點的值
24if (q != (*p))else
29free(s);//
刪除前驅結點30}
31return1;
32}3334
/*35
** 若二叉排序樹root中存在關鍵字等於key的資料元素,則刪除該結點
36** 並返回1;如果不存在,則返回0
37*/
38int bst_delete(bitrnodeptr *root, treeelemtype key)
3943
44if ( key == (*root)->data )else
if ( key < (*root)->data )else
51 }
1 #include 2 #include "執行結果如下:search.h"3
4void
visit(bitrnodeptr e)58
9int main(void)10
19bst_tr**erse(root, visit);
2021 fflush(stdin);//
重新整理輸入緩衝區
22 printf("
\nenter key to be deleted: ");
23 scanf("
%c", &key);
24 bst_delete(&root, key);
25bst_tr**erse(root, visit);
2627
return0;
28 }
二叉排序樹
在複習資料結構,把這個東西總結一下。這種結構是動態查詢表,這種動態是相對靜態查詢 順序查詢,折半查詢,分塊查詢等 來說的。對於各種靜態鍊錶,要達到查詢複雜度為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 ...