/**
* 二叉查詢樹
* 部分**參考自treemap的原始碼
*/public
class
binarysearchtree
public binarysearchtree(comparator<? super
t> comparator)
/*** 向樹中插入新結點**
@param
key 新結點的key值
*/public
void
insert(t
key)
while (x != null)
z.parent = y;
cmp = comparekey(z.key, y.key);
if (cmp < 0)
y.left = z;
else
y.right = z;
size++;
}/**
* 刪除樹中某個結點**
@param
key 待刪除結點的key值
* @return
被刪除結點的key值
*/public
tremove(t
key)
public
boolean
isempty()
public
intsize()
/*** 返回二叉查詢樹中最左子結點**
@return
返回二叉查詢樹中最左子結點
*/public
treenode
firstnode()
/*** 返回二叉查詢樹中最右子結點**
@return
返回二叉查詢樹中最右子結點
*/public
treenode
lastnode()
/*** 根據key值查詢結點
*/public
treenode
find(t
t) return
null;
}/**
* 返回結點集
*/public
set> nodeset()
/*** 返回傳入結點的後繼結點
*/private
static
treenodesuccessor(treenodet)
return p;}}
/*** 返回傳入結點的前趨結點
*/private
static
treenodepredecessor(treenodet)
return p;}}
private
static
treenodegetfirstnode(treenodet)
private
static
treenodegetlastnode(treenodet)
/*** 用結點v替換結點u在樹中的位置
*/private
void
transplant(treenodeu, treenodev)
/*** 刪除樹中的結點
*/private
void
deletenode(treenodep)
transplant(p, y); //
最後用y替換p
y.left = p.left;
y.left.parent = y;}}
/*** 用於比較樹中結點的key值
*/private
intcomparekey(t
key1, t
key2)
return cmp;
}private
static
boolean
keyequals(object
o1, object
o2)
/*** 二叉查詢樹的結點類
*/public
static
final
class
treenode
public
tgetkey()
public
boolean
equals(object
o) public
string
tostring()
}/**
* 樹中結點的集合類,使用迭代器遍歷,從最左結點開始,依次取其後繼結點(即中序遍歷)
*/final
class
nodeset
extends
abstractset
>
public
intsize()
}final
class
nodeiterator
extends
privatenodeiterator
>
public
treenode
next()
public
void
remove()
}abstract
class
privatenodeiterator
implements
iterator
public
boolean
hasnext()
final
treenode
nextnode()
}}
演算法導論讀書筆記(12)二叉搜尋樹
第三部分 資料結構 設x是二叉搜尋樹中的乙個結點,則 1.若y是x的左子樹中的乙個結點,那麼 y.key x.key 2.若y是x的右子樹中的乙個結點,那麼 y.key x.key 中序遍歷 輸出的子樹根的關鍵字位於其左子樹的關鍵字和右子樹的關鍵字值之間 先序遍歷 輸出的根的關鍵字在其左右子樹的關鍵...
演算法導論 二叉查詢樹
部分實現,用insert生成二叉查詢樹。暫無delete函式。建立查詢樹是用insert逐個插入。比較簡陋,希望有所幫助。includeusing namespace std struct node class searchtree void create void insert node newn...
演算法導論之二叉查詢樹
還要認真學習啊,功力不夠,要多向師兄師姐學習,自己也要努力。includeusing namespace std 首先進行二叉樹的一些操作的 補上之前欠下的東西 class bintree class treenode class treenode int element,treenode lchi...