二叉查詢樹(binary search tree),又被稱為二叉搜尋樹。設x為二叉查詢樹中的乙個結點,x節點包含關鍵字key,節點x的key值記為 ke
y[x]
k ey
[x]。
如果y是x的左子樹中的乙個結點,則 ke
y[y]
<=ke
y[x]
k ey
[y]<=ke
y[x]
; 如果y是x的右子樹的乙個結點,則 ke
說明:若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;
任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;
任意節點的左、右子樹也分別為二叉查詢樹。
沒有鍵值相等的節點(no duplicate nodes)
1. 節點結構:
typedef
int type;
typedef
struct bstreenodenode, *bstree;
2. 建立節點static node* create_bstree_node(type key, node *
parent, node *left, node* right)
3.插入
4. 查詢
node* iterative_bstree_search(bstree x, type key)
return x;
}
5. 最大值和最小值node* bstree_maximum(bstree tree)
node* bstree_minimum(bstree tree)
6. 刪除
二叉查詢樹的刪除分為三種情況:
刪除節點為葉子節點:
直接刪除葉子節點
刪除節點只有左子樹或者只有右子樹:
刪除節點,並將左子樹或者右子樹接到刪除節點位置
刪除節點左子樹與右子樹都有
刪除節點,將左子樹接到刪除節點的位置,右子樹接到左子樹的最右子樹位置。
刪除節點,將右子樹接到刪除節點的位置,左子樹接到右子樹的最左子樹位置。
資料結構之二叉查詢樹
針對二叉查詢樹的操作 增刪改查 的時間和樹的高度成正比,比如都有10個節點的乙個樹,樹高為4和樹高為10的操作時間肯定是不同的,這個時間實際上是o lgn 二叉查詢樹的期望的樹高是lgn,從而基本動態集合的操作平均時間為 lgn 通常二叉查詢樹基於鍊錶實現,每個節點儲存左,右子節點,如果想更方便的實...
資料結構之二叉查詢樹
二叉樹成為二叉查詢樹的性質是,對於樹種的每個節點x,他的左子樹中的所有關鍵字的值均小於x的關鍵字的值,而他的右子樹中的所有關鍵字的值均大於x的關鍵字的值。這意味著,該樹的所有元素均可以是用某種統一的方式排序。tree.h pragma once we define the binary tree.s...
資料結構查詢演算法之二叉查詢樹
關於二叉查詢樹,介紹肯定是很多的,這裡我列舉的下面的 和思想,是按照二叉查詢樹,但是沒有使用二叉樹的資料結構,而是按照陣列索引建立邏輯上的二叉樹結構,並使用二叉樹的遞迴方式查詢給定的值,並在注釋中對不同的情況提出一點自己的看法,建立樹的過程參考堆排序的思想,並且在結構上大致相同,所以需要注意的地方也...