已知一棵二元樹(binary tree)的前序走訪(preorder traversal)與中序走訪(inorder
traversal)之結果分別如下:(每小題10 分,共20 分)
前序-A B D E G H C F I
中序-D B G E H A C I F
請繪出這棵二元樹。
這棵二元樹的後序走訪(postorder traversal)結果為何?
依據下圖內容,請寫出它的相鄰矩陣(adjacency matrix)表示法。(4 分)
請定義生成樹(spanning tree)。(6 分)
請畫出此圖的最小成本生成樹(minimum cost spanning tree),以及計算最小成本。
(10 分)
六、有一雜湊表格(hash table)T 的記憶空間共含11 個桶(buckets),位址編號由0 至
10,每個桶有一個槽(slot)。雜湊函數h1 定義為h1(key) = key % 11,當有碰撞
(collision)發生時採二次雜湊開放定址法(open addressing with double hashing)
處理,其函數定義為h(key, j) = (h1(key)+j * h2(key)) % 11,其中j 為碰撞次數,
j = 1, 2, 3, ..., 11,h2(key) = 1+(key % 10)。欲將26 放入雜湊表格T,總共經過6 次
探測才成功找到存放位址。請問26 在雜湊表格T 的探測順序為何?(6 分)
a
b
e
c
f
g
d
5
9
13
15
16
12
9
pattern
a
b
b
a
b
c
a
b
b
a
failure
?
?
?
?
?
?
?
?
?
?
四、請參考圖2。每一條線段上的數字代表兩節點間的距離。請找出a 節點到k 節點的
最短路徑的長度。並請說明你的方法如何應用在非常大型的圖裡。(15 分)
五、請參考圖3。圖3 是一個activity-on-edge 網路。在activity-on-edge 網路中,一項計
畫可以分成很多件工作,每一件工作由一條線段代表,線段上的數字代表該工作所
需的時間(以工作日為單位),線段的箭頭代表工作的先後關係。例如在圖3 中,
ab 及db 線段代表的工作完成之後,bc、be、及bf 線段代表的工作才可以開始進行,
其他的先後關係依此類推。a 節點是起點,k 節點是全部工作的完成點。請找出k
節點的最早完成時間及關鍵路線(critical path)。並請說明你的方法如何應用在非
常大型的圖裡。(15 分)
(請接第三頁)
圖3 Activity-on-edge 網路
圖2 最短路徑
a
22
21
11
11
21
12
12
21
13
13
19
27
23
23
5
14
b
c
d
e
f
g
h
k
a
b
c
d
e
f
g
h
k
16
11
12
13
17
23
27
21
41
10
26
49
4
5
3
7
35
14
3
7
102年特種考試地方政府公務人員考試試題
類 科: 資訊處理
全三頁
第三頁
六、在一個二元樹裡有許多節點(nodes)。假設每一個節點的資料結構如下圖:
其中DATA 欄位為該節點的資料。LEFT 欄位為指向左方子樹的指標變數。RIGHT
欄位為指向右方子樹的指標變數。
如果節點p 沒有左方子樹,其LEFT 欄位為空指標(null pointer)。同理,如果節
點p 沒有右方子樹,其RIGHT 欄位為空指標(null pointer)。
如果一個二元樹有n 個節點,那麼它有幾個空指標?(5 分)
我們可以利用原本是空指標的欄位來儲存引線(threads)。二元樹加上引線的結
果稱為引線樹(threaded trees)。當然我們必須在各節點再加上兩個欄位LTAG
及RTAG,共5 個欄位,如下圖所示:
如果LEFT 欄位代表一般的節點指標,則LTAG = 0。如果LEFT 欄位代表引線指標,
則LTAG = 1。同理,如果RIGHT 欄位代表一般的節點指標,則RTAG = 0。如果
RIGHT 欄位代表引線指標,則RTAG = 1。
請將下圖的二元樹加上適當的引線指標,讓它變成引線樹,並請繪圖標出A 到I 共
9 個節點中所有引線指標指向的節點。(10 分)
LEFT
DATA
RIGHT
LTAG
LEFT
DATA
RIGHT
RTAG
A
B
C
D
E
F
G
H
I