BST 二叉搜尋樹原始碼筆記

2022-01-11 15:07:41 字數 2674 閱讀 1993

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 因為當對空樹插入時,相當於改變了樹的根節點的指向,因此需要用到指標或引...