資料結構考研筆記(十三) 二叉排序樹

2021-10-24 22:19:48 字數 2407 閱讀 9352

二叉排序樹 bst 也稱二叉查詢樹

二叉排序樹或者為空樹,或者為非空樹,當為非空樹時有如下特點:

1)若左子樹排空,則左子樹上所有結點關鍵字值均小於根結點的關鍵字。

2)若右子樹排空,則右子樹上所有結點關鍵字值均大於根結點的關鍵字。

3)左、右子樹本身也分別是一 棵二叉排序樹。

中序遍歷序列: 1 2 3 4 5 7 8 10 16

左子樹 根 右子樹

左子樹結點值《根結點值《右子樹結點值

二叉排序樹的中序遍歷序列是一 個遞增有序序列

查詢

二叉樹非空時,查詢根結點,若相等則查詢成功;

若不等,則當小於根結點值時,查詢左子樹;當大於根結點的值時,查詢右子樹。

當查詢到葉節點仍沒查詢到相應的值,則查詢失敗。

bstnode *bst_ search

(bitree t,elemtype key, bstnode *

&p)return t:

}

插入

若二叉排序樹為空,則直接插入結點;

若二叉排序樹非空,當值小於根結點時,插入左子樹;當值大於根結點時,插入右子樹;當值等於根結點時不進行插入。

int bst_ insert (bitree gt,keytype k)

(//要插入的樹,k 要插入的值

1f(t==

null

)else

if(k == t->key)

return0;

else

1f(k < t->key)

//插入左子樹

return bst_ insert (t->lchild, k)

;else

//插入右子樹

return bst_ insert (t->rchild, k)

;}

構造二叉排序樹

讀入乙個元素並建立結點,若二叉樹為空將其作為根結點;

若二叉排序樹非空,當值小於根結點時,插入左子樹;當值大於根結點時,插入右子樹;當值等於根結點時不進行插入。

void create_ bst (bitree &t, keytype str[

], int n)

}

順序不同,樹也不同

刪除

1)若被刪除結點z是葉結點,則直接刪除;

2)若被刪除結點z只有一-棵子樹,則讓z的子樹成為z父結點的子樹,代替z結點。

3)若被刪除結點z有兩棵子樹,則讓z的中序序列直接後繼代替z,並刪去直接後繼結點。

下面的例子是 第三種情況,刪除的結點z有兩顆子樹。 刪除結點4

在二叉排序樹中刪除並插入某節點,得到的二叉排序樹可能相同可能不同,如下面的兩個例子

查詢效率

平均查詢長度(asl) 取決於樹的高度。

解析:結點2經歷乙個結點,結點1和結點4都分別經歷了兩個結點(2*2) 結點3 經歷3個結點。

二叉排序樹盡量構造成乙個平衡二叉樹,此時效率做高

資料結構 八 二叉排序樹

基本操作 建立bst 查詢 插入乙個節點 中序遍歷 將得到遞增序列 刪除乙個節點 include include include pragma warning disable 4996 typedef struct mybst bst bst create 建立bst bst insert bst ...

資料結構 二叉排序樹

二叉排序樹是一種特殊結構的二叉樹,它作為一種表的組織手段,通常被稱為 樹表。可以作為一種排序和檢索的手段。定義 二叉排序樹或是空樹,或是具有下述性質的二叉樹 其左子樹上所有結點的資料值均小於根結點的資料值 右子樹上所有結點的資料值均大於或等於根結點的資料值。左子樹和右子樹又各是一棵二叉排序樹。對二叉...

資料結構 二叉排序樹

二叉排序樹 binarysorttree 具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 3 左 右子樹也分別為二叉排序樹 include includeusing namespace std type...