bst樹的定義:
二叉搜尋樹或者是一顆空樹,或者是具有下列性質的二叉樹:
1.每個節點都有乙個作為搜尋依據的關鍵碼(key),所有節點的關鍵碼都互不相同。
2.左子樹(如果存在)上所有節點的關鍵碼都小於根節點的關鍵碼
3.右子樹(如果存在)上所有節點的關鍵碼都大於根節點的關鍵碼。
4.左子樹和右子樹也是二叉搜尋樹
如圖下面這棵樹就是一顆二叉排序樹:
通過上述定義我們不難得出下面這個結論:
如果對一顆二叉搜尋樹進行中序遍歷,可以按照從小到大的順序,將各節點關鍵碼排列起來,所以也稱二叉搜尋樹為二叉排序樹。
首先我們給出二叉搜尋樹的結構:
typedef
int elemtype;
typedef
struct bstnode
btnode;
typedef
struct
bstree;
首先,當這個二叉搜尋樹是一顆空樹的時候,程式設計師需要進行節點的申請,也就是說它所佔的空間的申請:
struct bstnode*
buynode()
以及對空間(記憶體)的釋放:
void
freenode
(bstnode* p)
對二叉搜尋樹進行初始化:
void
init_tree
(bstree & mytree)
查詢某個資料域為x的節點應該插入到哪個位置:
bstnode*
findvalue
(bstree& mytree, elemtype x)
return p;
//返回資料域為x的這個節點
}
給二叉搜尋樹中插入乙個節點:
void
insert_tree
(bstree& mytree, elemtype val)
if(p !=
null
&& p->data == val)
return
; p =
buynode()
; p->data = val;
p->parent = pa;
if(pa ==
null
)else
else
} mytree.cursize +=1
;}
二叉搜尋樹的中序遍歷:
void
inorder
(bstnode* ptr)
}
找二叉搜尋樹的最小值(最左邊的值)
btnode*
first
(btnode* ptr)
return ptr;
}
找二叉搜尋樹的最大值(最右邊的值)
btnode*
last
(btnode* ptr)
return ptr;
}
找二叉搜尋樹的某個節點的後繼節點:
bstnode*
next
(bstnode* ptr)
else
return pa;
}}
找二叉搜尋樹的前驅節點:
bstnode*
prov
(bstnode* ptr)
else
return pa;
}}
二叉搜尋樹的非遞迴遍歷:
void
niceinorder
(bstree &mytree)
cout << endl;
}
二叉搜尋樹的非遞迴逆序遍歷:
void
reniceinorder
(bstree& mytree)
cout << endl;
}
按值刪除二叉搜尋樹中的節點;
bool remove_value
(bstree& mytree,elemtype val)
//leaf
bstnode* pa = p->parent;
bstnode* child = p->leftchild !=
null
? p->leftchild : p->rightchild;
if(child !=
null
)child->parent = pa;
if(pa ==
null
)else
if(pa->rightchild == p)
}freenode
(p);
mytree.cursize -=1
;return true;
}
主函式**如下所示:
int
main()
;int n =
sizeof
(arr)
/sizeof
(arr[0]
);bstree mytree;
init_tree
(mytree)
;for
(int i =
0; i < n; i++
)inorder
(mytree.root)
; cout << endl;
niceinorder
(mytree)
; cout << endl;
reniceinorder
(mytree)
; cout << endl;
remove_value
(mytree,88)
;inorder
(mytree.root)
; cout << endl;
destroy_tree
(mytree)
;return0;
}
最終執行結果如下所示:
二叉搜尋樹(二叉排序樹)BST
定義 每個節點至多有兩個孩子結點,且子樹有左右序之分,左子樹的鍵值永遠比右子樹小,並且小於根鍵值,且沒有鍵值相等的結點。操作 插入 查詢操作注意左右鍵值大小這一特點。刪除操作是重點,若沒有子結點或只有乙個子結點很好處理,若有兩個子結點,刪除父結點誰來繼位?找到左子樹中鍵值最大的點!用它來代替被刪除結...
樹 二叉搜尋樹 bst
二叉搜尋樹 定義 二叉搜尋樹 bst 也稱二叉排序樹或二叉查詢樹 二叉搜尋樹 一棵二叉樹,可以為空 如果不為空,滿足以下性質 非空左子樹的所有鍵值小於其根結點的鍵值 非空右子樹的所有鍵值大於其根結點的鍵值 左 右子樹都是二叉搜尋樹 特殊函式 bintree find elementtype x,bi...
二叉搜尋樹BST
在二叉搜尋樹b中查詢x的過程為 1.若b是空樹,則搜尋失敗,否則 2.若x等於b的根結點的資料域之值,則查詢成功 否則 3.若x小於b的根結點的資料域之值,則搜尋左子樹 否則 4.查詢右子樹 指標parent指向proot的父節點,其初始呼叫值為null 若查詢成功,指標ptarget指向目標節點,...