參考了獵豹網校
引用部落格:二叉查詢樹與平衡二叉樹
二叉查詢樹的插入演算法比較簡單:空樹,就首先生成根節點;不是空樹就按照查詢的演算法,找到父節點,然後作為葉子節點插入,如果值已經存在就插入失敗。
刪除操作稍微複雜一點,有如下幾種情況:
(1)如果刪除的是葉節點,可以直接刪除;
(2)如果被刪除的元素有乙個子節點,可以將子節點直接移到被刪除元素的位置;
(3)如果有兩個子節點,這時候就採用中序遍歷,找到待刪除的節點的後繼節點,將其與待刪除的節點互換,此時待刪除節點的位置已經是葉子節點,可以直接刪除。
mai.cpp
#include
#include
"bst.h"
using
namespace std;
intmain()
bst.h
#pragma once
#ifndef bst_h
#define bst_h
enum boolean
;template
<
class
type
>
class
element
;template
<
class
type
>
class
bst;
//前置宣告
template
<
class
type
>
class
bstnode
//樹節點
;template
<
class
type
>
class
bst boolean insert
(const element
& x)
; bstnode
*search
(const element
& x)
; bstnode
*search
(bstnode*,
const element&)
; bstnode
*itersearch
(const element&)
;void
display()
private
: bstnode
*root;};
template
<
class
type
>
void bstnode
::display
(int i)
template
<
class
type
>
boolean bst
::insert
(const element
&x)//找到的位置就是q
p =new bstnode
; p-
>leftchild = p-
>rightchild =0;
p->data = x;if(
!root) root = p;
else
if(x.key < q-
>data.key) q-
>leftchild = p;
else q-
>rightchild = p;
return true;
}template
<
class
type
>
bstnode
* bst
::search
(const element
&x)template
<
class
type
>
bstnode
* bst
::search
(bstnode
* b,
const element
&x)template
<
class
type
>
bstnode
* bst
::itersearch
(const element
&x)return0;
}#endif
資料結構之二叉查詢樹
針對二叉查詢樹的操作 增刪改查 的時間和樹的高度成正比,比如都有10個節點的乙個樹,樹高為4和樹高為10的操作時間肯定是不同的,這個時間實際上是o lgn 二叉查詢樹的期望的樹高是lgn,從而基本動態集合的操作平均時間為 lgn 通常二叉查詢樹基於鍊錶實現,每個節點儲存左,右子節點,如果想更方便的實...
資料結構之二叉查詢樹
二叉樹成為二叉查詢樹的性質是,對於樹種的每個節點x,他的左子樹中的所有關鍵字的值均小於x的關鍵字的值,而他的右子樹中的所有關鍵字的值均大於x的關鍵字的值。這意味著,該樹的所有元素均可以是用某種統一的方式排序。tree.h pragma once we define the binary tree.s...
資料結構之二叉查詢樹
二叉查詢樹 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的右子樹的乙個結點,則 ...