演算法導論讀書筆記(14) 二叉查詢樹的具體實現

2021-07-28 08:05:10 字數 2771 閱讀 7598

/**

* 二叉查詢樹

* 部分**參考自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...