下載/瀏覽

Download Report

Transcript 下載/瀏覽

二三樹 (2-3 Trees)
二技晶片四甲
19637048
林宥鈞
何謂2-3 Tree
–若不是空集合,則要符合下列的定義。
–2-3 Tree中的節點可以存放一筆或兩筆資料。
–若節點中存放了一筆資料Ldata,其必須存在兩個子點節-
左子節點與中子節點。
2-3 Tree定義
–左子節點所存放的資料鍵值必須小於Ldata.key。
–中子節點所存放的資料鍵值必須大於Ldata.key。
Ldata
左子節點
中子節點
2-3 Tree 存放了兩筆資料Ldata與Rdata
(1) Ldata < Rdata
(2)左子節點所存放的資料必須小於Ldata
(3)中子節點所存放的資料必須大Ldata,
小於Rdata
(4)右子節點所存放的資料必須大於Rdata
2-3 Tree定義
樹中的所有樹葉節點必須為同一階(Level)。
Ldata, Rdata
左子節點
中子節點
右子節點
2-3 Tree的加入
• 從2-3 Tree的開始搜尋,假使加入的資料其鍵值在2-3
Tree中找不到,則加入2-3 Tree中。
• 假設加入的節點,
–該節點只有一筆資料,則直接加入;
–該節點已存在兩筆資料,加入後不符合2-3 tree的定
義,因此必須將此節點資料一分為二,分別放入最大
鍵值和最小鍵值並將中間的鍵值,往上放到父節點。
2-3 Tree的加入
• 該節點的父節點也已有二筆資料。
a
45
d
10,20
加入60於左下圖
b
c
30
70
e
40
f
50
50,60
g
80,85
2-3 Tree的加入
繼續加入90
然後將85加入,因
為85介於80和90之
間。
a
45
d
10,20
b
c
30
70
e
40
f
50,60
g
80, 85 ,90
2-3 Tree的加入
•繼續加入55加入c節點
a
45
b
c
30
d
10,20
70,85
e
40
f
50,60
g
80
h
90
2-3 Tree的加入
a
•並將70加入其父節點a
45
b
c
30
d
10,20
70,85
e
40
f
g
50,55,60 80
h
90
2-3 Tree的加入
a
繼續加入15
45,70
c
b
55
30
d
10,20
j
f
e
40
50
85
i
g
h
60
80
90
2-3 Tree的加入
a
45,70
c
b
55
30
d
10,15,20
j
f
e
40
50
85
i
g
h
60
80
90
2-3 Tree的加入
a
繼續加入25
45,70
c
b
55
15,30
d
k
10
20
j
f
e
40
50
85
i
g
h
60
80
90
2-3 Tree的加入
a
繼續加入17
45,70
c
b
55
15,30
d
10
k
20,25
j
f
e
40
50
85
i
g
h
60
80
90
2-3 Tree的加入
45,70
c
20 b
55
15,30
d
10
k
j
f
e
17,20,25 40
50
85
i
g
h
60
80
90
2-3 Tree的加入
p
45
a
n
20
70
b
15
d
10
j
m
30
j
55
k
y
e
17
25
40
f
50
85
i
g
h
60
80
90
2-3 Tree的刪除
•Tree的刪除分成兩部份:
一為刪除的鍵值是在樹葉節點上
二為刪除的鍵值是在非樹葉節點
2-3 Tree的刪除
• 若刪除的鍵值是在
樹葉節點上
a
60
35
d
15
• 今欲刪除左圖中節
點f的鍵值70
c
b
80,90
e
50
f
70,75
g
85
h
95,96
2-3 Tree的刪除
若繼續刪除85
a
60
c
b
35
d
15
80,90
e
50
f
75
g
85
h
95,96
2-3 Tree的刪除
•假設我們要刪除的是圖中節點g的鍵值85,
此時不可直接刪除就結束(why?)
•我們必需向左或右兄弟節點借一個鍵值。
•若我們向右邊的節點h借,則需借一個最小的鍵值
95(為什麼?),取代刪除的85,並將95往上提到
c節點上。最後結果如下圖所示:
2-3 Tree的刪除
a
60
c
b
35
d
15
80,90
e
50
f
70,75
g
85
h
95,96
2-3 Tree的刪除
若繼續刪除90,左兄弟節點
借一個最大值75,往上提至
父節點,並將父節點的80
(因為它介於75和90之間)
取代90
a
60
c
b
35
d
15
80,95
e
50
f
70,75
g
90
h
96
2-3 Tree的刪除
a
60
c
b
35
d
15
80,95
e
50
f
70,75
g
90
h
96
2-3 Tree的刪除
a
60
c
b
35
d
15
75,95
e
50
f
70
g
80
h
96
繼續刪除80的話,則
因為它的左右兄弟節
點皆無一個以上的鍵
值,此時必需挑左或
右兄弟與其父節點的
某一鍵值合併
2-3 Tree的刪除
a
60
d
15
b
c
35
75
e
50
f
70
h
95,96
2-3 Tree的刪除
• 刪除的鍵值在非樹葉節點上
•若此時欲刪除下圖中a節點的鍵值60.則可
以找此節點之右子樹中最小的鍵值來取代,
或找左子樹中最大的鍵值來取代之,若以
右子樹中最小的鍵值來取代的話,則f節點
的70將取代60,如右下圖所示。
2-3 Tree的刪除
a
60
c
b
35
d
15
80,90
e
50
f
70,75
g
85
h
95,96
2-3 Tree的刪除
繼續再刪除70鍵值,
找右子樹中最小的鍵
值 75 來取代之,並
進行前述的處理,
a
70
c
b
35
d
15
80,90
e
50
f
75
g
85
h
95,96
2-3 Tree的刪除
繼續再刪除90,找右子樹
中最小的鍵值 95 來取代
之
a
75
c
b
90
35
d
15
e
50
f
80,85
h
95,96
2-3 Tree的刪除
a
繼續再刪除95,以
左子樹中最大的鍵
值來取代之
75
c
b
95
35
d
15
e
50
h
f
80,85
96
2-3 Tree的刪除
若繼續再刪75,若
以右子樹中80取代
的話後,情形如下
圖示:
a
75
c
b
85
35
d
15
e
50
h
f
80
96
2-3 Tree的刪除
刪除80的樹葉節點一般,隨機的挑
選以右子樹的最小值或左子樹的最
大值交換的應用。
a
80
c
b
?
35
d
15
10,15
e
h
50
85,96
右圖不符合2-3 tree的定義,
因為有一節點沒有鍵值故需再
調整之,方法如下圖所示:
2-3 Tree的刪除
刪除80的樹葉節點一般,隨機的挑
選以右子樹的最小值或左子樹的最
大值交換的應用。
a
80
c
b
?
35
d
e
h
10,15
50
85,96
右圖不符合2-3 tree的定義,
因為有一節點沒有鍵值故需再
調整之,方法如下圖所示:
2-3 Tree的刪除
左圖不符合2-3 tree的定義,因為
有一節點沒有鍵值故需再調整之,
方法一:
如右圖所示:
35,80
50
10,15
85,96
50
方法二:若以左子樹中
的50取代的話,則結
果如右圖所示:
85
15
10
35
80
96
2-3 Tree結論
•資料也常有搜尋的需求,tree才是常見的搜尋結
構。
•tree可以用陣列來表示,也可以用鏈結串列來表
示。
•寫程式的人可選擇效率比較好的方式來實作,一
旦完成了資料結構的實作,未來若是有演算法需
要用到該種資料結構,就可以直接使用,不必再
寫程式。
謝謝指教