二叉查詢樹

2022-09-01 10:06:10 字數 2946 閱讀 2307

1、二叉搜尋樹(b樹)

一棵二叉搜尋樹(bst)是以一棵二叉樹來組織的,可以用鍊錶資料結構來表示,其中,每乙個結點就是乙個物件,一般地,包含資料內容key和指向孩子(也可能是父母)的指標屬性。如果某個孩子結點不存在,其指標屬性值為空(nil)。

二叉搜尋樹中的關鍵字key的儲存方式總是滿足二叉搜尋樹的性質:

設x是二叉搜尋樹中的乙個結點。如果y是x左子樹中的乙個結點,那麼會有y.key<=x.key;如果y是x右子樹中的乙個節點,那麼有y.key>=x.key。

二叉搜尋樹上基本操作所花費的時間與這棵樹的高度成正比,對於有n個結點的一棵完全二叉樹而言,這樣的操作的最壞執行時間是o(lgn)。然而如果這棵樹是一條n個結點組成的線性鏈,那麼操作需要花費的時間為0(n)。

由圖可以看出,對於遇到的每個結點x,都會比較x.key與k的大小,如果相等,就終止查詢,否則,決定是繼續往左子樹還是右子樹查詢。因此,整個查詢過程就是從根節點開始一直向下的一條路徑,若假設樹的高度是h,那麼查詢過程的時間複雜度就是o(h)。

查詢二叉搜尋樹

//遞迴實現  

tree_search(x, k):

if x == nil or x.key == k :

return x

if k < x.key

return tree_search(x.left, k)

else return tree_search(x.right, k)

//非遞迴迭代實現  

tree_search(x, k) :

while x!=nil and k!=x.key:

if k < x.key

x = x.left

else x = x.right

return x

最大關鍵字元素和最小關鍵字元素通過樹根開始沿著left孩子指標一直到nil,可以找到最小元素。

tree-minmum(x)

while x.left != nil

x = x.left

return x

同樣的方法可以找到最大值。

tree-maxmum(x)

while x.right!= nil

x = x.right

return x

查詢最小值和最大值的方法均能夠在o(h)的時間內完成。

後繼和前驅

都在利用之前的部分,通過找x的右子樹找到後繼,通過找x的左子樹找到前驅。找前驅和找後繼的方法是相同的。

tree_successor(x):  

if x.right != nil

return tree_minnode(x.right)

y = x.p

while y!=nil and x == y.right

x = y

y = y.p

return y

插入操作當需要插入乙個新結點時,從根節點開始,迭代或者遞迴向下移動,直到遇到乙個空的指標nil,需要插入的值即被儲存在該結點位置。這裡給出迭代插入演算法,遞迴方式的比較簡單。

tree_insert(t, z):  

y = nil

x = t.root

while x != nil

y = x

if z.key < x.key

x = x.left

else x = x.right

z.p = y

if y == nil

t.root = z

else if z.key < y.key

y.left = z

else y.right = z

刪除操作二叉搜尋樹的節點刪除比較複雜,可以分為三種情況:

1、如果z沒有孩子節點,那麼直接刪除,並修改父節點,用nil代替z;

2、如果z只有乙個孩子,那麼將這個孩子節點提公升到z的位置,並修改z的父節點,用z的孩子替換z;

3、如果z有兩個孩子,那麼查詢z的後繼y(y一定在z的右子樹中),然後用y替換z。

對於情況3,可以繼續細分為2種情況:

1.z的後繼y位於右子樹中,但是沒有做孩子,也就是說y的是後繼。

2.z的後繼位於z的右子樹中,但是並不是z的右孩子,此時,用y的右孩子替換y,然後用y替換z。

二叉樹 二叉查詢樹

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

二叉樹 二叉查詢樹

二叉樹 binary tree 一種樹型結構,每個節點最多擁有兩個節點。如下圖 幾種型別的二叉樹 1.full binary tree 每個節點的孩子數 是 0 或者 2.對高度沒有要求。如下圖 2.perfect binary tree 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並...

樹(樹,二叉樹,二叉查詢樹)

1.定義 n n 0 個結點構成的有限集合。當n 0時,稱為空樹 2.對於任一棵非空樹 n 0 它具備以下性質 1 樹中有乙個稱為 根 root 的特殊結點,用 r 表示 2 其餘結點可分為m m 0 個互不相交的有限集t1,t2,其中每個集合本身又是一棵樹,稱為原來樹的子樹。3.樹的一些性質 1 ...