tree.h
typedef int elementtype;
/* start: fig4_16.txt */
#ifndef _tree_h
#define _tree_h
struct treenode; // 定義結構體節點
typedef struct treenode *position; // 指向節點的指標
typedef struct treenode *searchtree; // 指標,表示搜尋樹,是搜尋樹的根節點
searchtree makeempty( searchtree t );
position find( elementtype x, searchtree t );
position findmin( searchtree t );
position findmax( searchtree t );
searchtree insert( elementtype x, searchtree t );
searchtree delete( elementtype x, searchtree t );
elementtype retrieve( position p );
#endif /* _tree_h */
/* end */
tree.c#include "tree.h"
#include #include "fatal.h"
struct treenode
;/* start: fig4_17.txt */
// 建立一棵空樹
searchtree
makeempty(searchtree t)
return null;
}/* end */
/* start: fig4_18.txt */
// 二叉搜尋樹的查詢操作
position
find(elementtype x, searchtree t)
/* end */
/* start: fig4_19.txt */
// 查詢最小元素,即找出最左邊的葉子節點
position
findmin(searchtree t)
/* end */
/* start: fig4_20.txt */
// 查詢最大值
position
findmax(searchtree t)
/* end */
/* start: fig4_22.txt */
// 插入操作
searchtree
insert(elementtype x, searchtree t)
} else
/* 7*/ if (x < t->element)
/* 8*/ t->left = insert(x, t->left); // 遞迴尋找合適的插入位置
else
/* 9*/ if (x > t->element)
/*10*/ t->right = insert(x, t->right);
/* else x is in the tree already; we'll do nothing */
/*11*/ return t; /* do not forget this line!! */
}/* end */
/* start: fig4_25.txt */
// 刪除操作
searchtree
delete(elementtype x, searchtree t)
else /* one or zero children 有 1 個或者 0 個孩子 */
}return t;
}/* end */
// 取出 position p 中的元素
elementtype
retrieve(position p)
main.c(testtree.c,測試函式)#include "tree.h"
#include int main( )
測試結果:
定義錯誤的標頭檔案 fatal.h
#include #include #define error(str) fatalerror( str )
#define fatalerror(str) fprintf( stderr, "%s\n", str ), exit( 1 )
注:關於刪除的操作的**,用來備忘刪除具有 1 個兒子的節點 4 的前後情況:
刪除具有 2 個兒子的節點 2 的前後情況:
二叉搜尋樹BST
在二叉搜尋樹b中查詢x的過程為 1.若b是空樹,則搜尋失敗,否則 2.若x等於b的根結點的資料域之值,則查詢成功 否則 3.若x小於b的根結點的資料域之值,則搜尋左子樹 否則 4.查詢右子樹 指標parent指向proot的父節點,其初始呼叫值為null 若查詢成功,指標ptarget指向目標節點,...
二叉搜尋樹(BST)
二叉搜尋樹 bst bst 或者是一棵空樹,或者對於任何乙個結點,設其值為k,則該結點的左子樹的值小於k,右結點的值大於k。二叉搜尋樹按照中根遍歷將各個結點列印,將得到按照大到小的順序排列。bsg示意圖 二叉搜尋樹的效率在於檢索,將演算法複雜度從2 k減少到log n 檢索方式 從根結點開始,如果等...
BST二叉搜尋樹
深入學習理解bst include using namespace std typedef struct bitnodebitnode,bitree 二叉樹的插入操作 void insert bitnode root,int x 因為當對空樹插入時,相當於改變了樹的根節點的指向,因此需要用到指標或引...