數(shù)據(jù)結(jié)構(gòu)-查找樹_第1頁
數(shù)據(jù)結(jié)構(gòu)-查找樹_第2頁
數(shù)據(jù)結(jié)構(gòu)-查找樹_第3頁
數(shù)據(jù)結(jié)構(gòu)-查找樹_第4頁
數(shù)據(jù)結(jié)構(gòu)-查找樹_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Chapter8searchtrees17

1722

19

6

11(a)

(b)6

9

615

3(c)

(d)Figure8-3invalidbinarysearchtreesAssume:TofindT,ComparingTwithroot,T<root

goleftT>root

go

rightAlgorithm

searchBST(val

root

<pointer>,val

argument<key>)Search

a

binary

search

tree

for

a

given

value

Preroot

is

the

root

to

a

binary

tree

orsubtree

argument

is

the

key

value

requested

Return

thenode

addressif

thevalue

isfoundNullif

thenode

isnot

in

the

tree1

if(root

is

null)1

return

null2end

if3

if

(argument<root->key)1return

searchBST(root->left,argument)4

else

if(argument>root->key)1

return

searchBST

(root->right,argument)

5

else1

return

root6

end

ifOperationsonbinarysearchtree

traversalsAlgorithms

areidentical

to

theones

in

chapter

7binary

search

treesearchalgorithmsFind

smallest

nodeFind

largest

nodeFind

requested

node●Insert

nodeSteps:1.Follow

the

branches

to

an

empty

subtree2.Insert

the

new

nodeAll

inserts

take

place

ata

leaf

or

aleaflike

node

thathas

onlyone

null

branchAfterinserting23238

44

1②

20358238)

44

12

2①

35Afterinserting

192318

4

1②

20

35Afterinserting.3819Note:node

withequalvaluesarefoundinthe

right

subtree52525②1

if(root

is

null)1

root

=new2

1else

pwalk

=root2

io

p(

k

a

ull)2

1

i

pl

key)3

else4end

P*alk=pwalk>isht3

end

loopLocationfornewnodefound4

if1

(n

k->el

f

pa

>key)5

el1s

->right

=new

6end

if3

end

if4returnwt-ent<nt>e-pareweftk->llk-wpwaey<lkw-aepwf(nlknwtpotlnaparepw1oAlgorithminsertBST(ref

root<pointer>,val

new

<pointer>)Insertnodecontainingnewdata

into

BSTusing

iterationPrerootisaddressof

firstnode

in

aBSTnewisaddressof

node

containingdatatobeinsertedPostnewnodeinsertedintothe

tree23Iterativeinsert(algorithm)end

insertBSTAlgorithm

8-4

iterativebinary

search

tree

insertwalk20parent

nul812new

19Finalpositionwhen

pwalk

nulRecursive

insertnode(algorithm)Algorithm

addBST(refroot

<pointer>,val

new

<pointer>)InsertnodecontainingnewdataintoBSTusingrecursionPrerootisaddressof

currentnodein

a

BSTnewisaddressof

nodecontainingdatatobe

insertedPostnewnodeinsertedintothetree1

if(root

is

null)i

root=new2

elselocate

null

subtreeforinsertion1

if(new->key<root->key)1

addBST(root->left,new)2

else1

addBST(root->right,new)3

end

if3end

if4returnend

insertBSTalgorithm8-5addnodeto

BST

recursivelyDelete

node1.locate

it●

2.delete:thereare4

possible

cases-The

node

has

no

children:set

the

delete

node's

parent

to

null,recycle

itsmemory,and

return-Has

only

a

right

subtree:attach

the

right

subtree

to

the

delete

node'sparent

and

recycle

its

memory.—Has

only

a

left

subtree:attach

the

left

subtree

to

the

delete

node's

parentand

recycle

its

memory.—Has

two

subtree:to

delete

a

node

from

the

middle

of

a

tree,to

keep

thebalance,we

must

find

a

node,...,two

ways:·Find

the

largest

node

in

the

deleted

node's

left

subtree,move

its

data

toreplace

the

deleted

node's

data·Find

the

smallest

node

in

the

deleted

node's

right

subtree,move

its

data

toreplace

the

deleted

node's

data—Regardless

of

which

logic

we

use,we

will

be

moving

data

from

a

leaf

orleaflike

node

that

can

be

deleted.(a)Deletenode(44)thathasnochildrenbefore

23

dltpt(44(12

152

12(b)Delete

node(44)with

no

left

childbefore

dltpt

|231441252(c)Delete

node(18)with

no

left

childtree

dltptr12

44

~8

區(qū)4區(qū)

區(qū)2江(d)Deletenode(23)withtwochildrenafterafterafter52afterdltptr23i44beforebefore1if

(root

is

null)1

return

false

Base

case

12endif

Nodenot

find3if(ditkey<root->data.key)1return

deleteBST

(root->left,dltkey)

4

elseif(dltkey

>root->data.key)1return

deleteBST

(root->right,dltkey)5

else//deletenodefound—testforleafnode1

if(root->left

null)3recycle(dltptr)4return

true2

1el

(t

o

ght

nuI)

Base

case

2tiroo->rti

ro

cy=crloe-l

rf)t

After

node

deleted4

return

true3

elsel/

odi

f

ot

a

leaf

(or

leaflike),find

largest

node

on

left

subtree

lo)de

found,move

data

and

delete

leafnode4re

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論