定義:乙個區域性搜尋資料結構儲存一系列元素,每個元素具有對應的乙個鍵值,這些鍵值屬於某個具有一定順序的集合.它支援以下操作:
由於雜湊表,陣列,排序陣列,鍊錶不能實現上述操作(有的可以,但是時間複雜度不符合),要 使用新的資料結構實現——二叉搜尋樹
x的鍵值大於它任意左子樹元素的鍵值,小於任意有右子樹元素的鍵值.
輸入:鍵值k,根節點r
輸出:根節點為r的樹中鍵值為k的結點
偽**實現
find(k,r)
//如果k等於結點的鍵值,返回該結點
if r.key == k:
return r
//若k小於根節點的鍵值,則在根節點的左子樹中查詢
else
if r.key > k:
if r.left != null:
return find(k, r.left)
//若找不到,則返回和要找鍵值最相近的結點(此時k要存在,應該是此節點的左孩子
return r
//若k大於節點的鍵值,則在結點的右子樹中查詢
else
if r.key < key:
if r.right != null:
return find(k, r.right)
//若找不到,則返回和要找鍵值最相近的結點(此時k要存在,應該是此節點的右孩子
return r
輸入:結點n
輸出:鍵值大於n結點中鍵值最小的結點
分兩種情況:
偽**實現
next(n)
//若n有右孩子結點
if n.right != null:
return leftdescendant(n.right)
//若n沒有右孩子結點
else:
return rightancestor(n.left)
//遞迴尋找n右孩子結點左子樹的左孩子結點
leftdescendant(n)
if n.left == null:
return n
else:
return leftdescendant(n.left)
//遞迴尋找大於n結點鍵值的父母結點(祖先結點)
rightancestor(n)
if n.key < n.parent.key:
return n.parent
else:
return rightancestor(n.parent)
輸入:鍵值x,y和根節點r
輸出:鍵值在x,y之間的系列結點
偽**實現
l <--- null
//找到鍵值為x的結點
n<--- find(x,r)
while n.key <= y:
if n.key >= x:
//找出大於n結點鍵值的最小結點
n<--- next(n)
return l
輸入:鍵值k和根節點r
輸出:新增鍵值為k的結點到樹中
偽**實現
insert(k, r)
p <--- find(k, r)
add new node with
key k as child of the tree
輸入:結點n
輸出:把結點n從書中移除
偽**實現
delete(n)
if n.right == null:
remove
n,promote n.left()
else:
x <--- next(n)
replace n by x,promote x.right
輸入兩棵樹s和t,其中s中的所有元素均小於t中的元素,返回包含s和t所有元素的一顆樹偽**實現
merge(r1, r2)
//找出r1中最大的元素,作為生成樹的根節點
t <--- find(max,r1)
delete(t)
mergewithroot(r1, r2, t)
return t
//兩棵樹,與根節點t合成一棵樹
mergewithroot(r1, r2, t)
mergewithroot(r1, r2, t)
t.left
<--- r1
t.right
<--- r2
r1.parent
<--- t
r2.parent
<--- t
return t
給定一棵樹和鍵值k,返回兩棵新樹r1和r2:其中r1的所有元素均小於或等於x,r2的所有元素均大於x偽**實現
split(r, x)
if r == null:
return (null, null)
if x
<= r.key:
(r1, r2) <--- split(r.left, x)
r3<--- mergewithroot(r1, r.right, r)
return (r1, r3)
if x >= r.key:
(r1, r2) <--- split(r.right, x)
r3<--- mergewithroot(r1, r.left, r)
return (r3,r2)
二叉樹 二叉查詢樹
構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 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 ...