二叉查詢樹 c

2021-09-23 13:37:26 字數 2461 閱讀 1609

遞迴定義

標頭檔案實現檔案

1. 結構體定義

2. 查詢函式

3. 查詢關鍵值最小的結點

4. 查詢關鍵值最大的結點

5. 插入函式

6. 刪除函式

7. 其他函式(makeempty,retrive)

二叉查詢樹(binary search tree, bst),在不同的書上我發現也可以叫二叉搜尋樹,二叉排序樹。

二叉樹的乙個重要應用就是在查詢中的應用,現在我們來遞迴地定義乙個二叉查詢樹:

因為二叉查詢樹是遞迴定義的,所以它的例程也是遞迴實現的。

#ifndef searchtree_h_included

#define searchtree_h_included

typedef

int elementtype;

struct treende;

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

// searchtree_h_included

結構體定義

struct treenode

;

查詢函式

從根結點開始,將給定值與根結點的關鍵字比較,如果大於關鍵字,那麼所查詢的結點一定在右子樹,小於關鍵字在左子樹。

position find

(elementtype x,searchtree t)

查詢值最小的節點

關鍵字值最小的節點一定在樹的最左側。

position findmin

(searchtree t)

查詢值最大的節點

關鍵字值最大的節點在樹的最右側。

position findmax

(searchtree t)

插入函式

插入乙個結點時,首先沿著樹查詢,如果樹中含有具有該關鍵字的結點,那麼就什麼都不做,如果遍歷到樹的葉子節點的左/右子樹時還未找到要插入的關鍵字,就在該結點處插入乙個新的結點。

searchtree insert

(elementtype x,searchtree t)

}else

return t;

}

刪除函式

刪除的操作比較複雜,要考慮幾種不同的情況:

設p為要刪除的結點

若p為葉子結點,直接刪除

若p只有乙個子樹,則用子樹的根節點替代p

若p有兩個子樹,情況就比較複雜,可以採取的方法有兩種:

1.複製刪除

2. 合併刪除

複製刪除:找到右子樹中關鍵值最小的結點q,替代p,然後刪除q。顯然q沒有左子樹,所以q的刪除是很簡單的。當然也可以使用左子樹中關鍵值最大的結點

合併刪除:使p的左子樹稱為p的右子樹中關鍵值最小的結點的左子樹,再使p的左子樹為空

這裡我給出複製刪除的**:

searchtree delete

(elementtype x, searchtree t)

else

return t;

}

其他函式實現

searchtree makeempty

(searchtree t)

return

null;}

elementtype retrieve

(position p)

二叉查詢樹 C

include stdafx.h include using namespace std 二叉查詢樹的性質 1.二叉排序樹或為空樹 2.若左子樹不為空,則左子樹中所有節點的值均小於或等於根節點 3.若右子樹不為空,則右子樹中所有節點的值均大於或等於跟節點 4.左右子樹也為二叉排序樹 5.二叉排序樹採...

C 二叉查詢樹

二叉排序樹 binary sort tree 又稱二叉查詢樹 binary search tree 亦稱二叉搜尋樹。二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點...

二叉樹 二叉查詢樹

構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 include include include include using namespace std 二叉樹結點 struct treenode 鍊錶結點 struct listnode struct tempnodetempnode...