二叉查詢樹(binary search tree),也稱二叉搜尋樹,是指一棵空樹或者具有下列性質的二叉樹:
二叉查詢樹相比於其他資料結構的優勢在於查詢、插入的時間複雜度較低。為o(log n)。二叉查詢樹是基礎性資料結構,用於構建更為抽象的資料結構,如集合、multiset、關聯陣列等。
二叉查詢樹是基於二叉樹的,其結點資料結構定義為如下:
private
class node
}
在二叉查詢樹中查詢x的過程如下:
1、若二叉樹是空樹,則查詢失敗。
2、若x等於根結點的資料,則查詢成功,否則。
3、若x小於根結點的資料,則遞迴查詢其左子樹,否則。
4、遞迴查詢其右子樹。
根據上述的步驟,寫出其查詢操作的**:
public boolean contains(key key)
public value get(key key)
private value get(node x, key key)
二叉樹查詢樹b插入操作x的過程如下:
1、若b是空樹,則直接將插入的結點作為根結點插入。
2、x等於b的根結點的資料的值,則直接返回,否則。
3、若x小於b的根結點的資料的值,則將x要插入的結點的位置改變為b的左子樹,否則。
4、將x要出入的結點的位置改變為b的右子樹。
**如下:
public
void put(key key, value val)
root = put(root, key, val);
assert check();
}private node put(node x, key key, value val)
二叉查詢樹中最難實現的就是刪除操作。下面是乙個解決辦法:
在刪除節點x後,用他的後繼節點填補它的位置。步奏如下:
1,將指向即將被刪除的節點的鏈結儲存為t;
2,將x指向它的後繼節點min(t.right);
3,將x的右鏈結指向deletemin(t.right);
4,將x的左鏈結(本為空)設為t.left。
**如下:
//刪除最小節點(熱身)
public
void
deletemin()
private node deletemin(node x)
//刪除最大節點(熱身)
public
void
deletemax()
private node deletemax(node x)
//刪除任意節點
public
void
delete(key key)
private node delete(node x, key key)
return x;
} public key min()
private node min(node x)
二叉樹 二叉查詢樹
構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 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 ...