โครงสร้างข้อมูลแบบทรี (Tree)
โครงสร้างข้อมูลแบบทรี (Tree)
Tree
• โครงสร้างข้อมูลที่ได้เรียนมาในบทก่อน ๆ จะพบว่า ข้อมูลแต่ละตัวมีความสัมพันธใ์นรูปเชิงเส้น หรือแบบเชิง 1 มิติ
• โครงสร้างข้อมูลแบบไม่เชิงเส้น ซึ่งสามารถแสดงถึงความสัมพันธ์ที่ซับซ้อนกว่า และโครงสร้างขอ้มูลแบบไม่เชิงเส้นที่ส าคัญที่สุดคือ Tree เป็นความสัมพันธ์ระหว่าง node ที่เป็นล าดับชั้นลดหลั่นกัน( Hierarchical Relationship )
2
Tree
• รูปแบบของ tree ถูกน ามาประยุกต์ในหลาย ๆ ด้านเพื่อใช้ ในการแสดงความสัมพันธ์ระหว่างข้อมูล
ตัวอย่างการใช้ tree1 เพื่อใชใ้นการแสดงความสัมพันธ์ของ
ครอบครัว
2. แสดงแผนผังการจัดบุคคลในบริษัท โดยจัดล าดับตามต าแหน่ง
3. การจดัท าสารบัญหนังสือในแบบโครงสร้างของ tree
3
Tree
4
นิยามของ Tree
1. ในเชิง Math มีลักษณะเปน็รีเคอร์ซีฟ
2. Tree เป็น set จ ากดั T ที่มีสมาชิก 1 Node หรือ มากกว่า ซึ่งมี node พิเศษ 1 node เรียก Root
3. Node อื่นๆ ทีเ่หลือจะถกูแบ่งออกเป็นกลุ่มทีไ่มม่ีสมาชิกรว่มกัน
สมมุติชื่อคือ T1 ,, T2 ,… Tn ( n >= 0 )โดยมีโครงสร้างเป็น ต้นไม้ย่อย เรียก Subtree เมื่อ n คือจ านวนกลุ่มต้นไม้ย่อย
5
นิยามของ Tree
6
V0 เป็น root ของ Tree ที่มีสมาชิกคือ{ V1 , V2 , V3 , V4 , V5 , V6 , V7 }
ต้นไม้ย่อย T1
ต้นไม้ย่อย T2
นิยามของ Tree
7
V1 เป็น root ของ Tree ที่มีสมาชิกคือ { V3 , V4 }
ต้นไม้ย่อย T1ต้นไม้ย่อย
T2
นิยามของ Tree
8
V2 เป็น root ของ Tree ที่มีสมาชิกคือ
นิยามของ Tree
ความสัมพันธ์ ระหว่าง Root node กับ Sub Tree เป็นลักษณะ พ่อ กับลูก (Parent and child )
• พ่อ (Father) คือ node ที่เป็น root ของ Tree หรือroot ของ Subtree
• ลูก (child ) คือ node ที่เชื่อมโยงต่อจาก node ที่เป็นพ่อ
9
นิยามของ Tree
10
A
B D
E F GT
C
H
พ่อ (Father)
ลูก(child )พ่อ (Father)
ลูก(child )
ค าศัพท์ส าหรับ Tree
1. Brother Node : Node ที่มีพ่อแม่เดียวกัน
2. Branch / Edge ( เอดจ์) : กิ่งเป็นเส้นเชื่อม ระหว่างพ่อกับลูก
3. Degree : จ านวนลูก หรอื ต้นไม้ย่อยของแต่ละ node
4. Leaf node : (ลีฟโหนด) คือ Node ที่ไม่มีลกู Degree = 0
5. Branch Node : Node ที่ไม่ใช่ Root , Leaf Degreeไม่เป็น 0
11
12
1. Brother Node : Node ที่มีพ่อเดียวกัน2. Branch / Edge : กิ่งเป็นเส้นเชื่อม ระหว่างพ่อกับลูก
A
B D
E F GT
C
H Leaf Node
Brother Node = {BCD} {EF} {HT}
Branch Node
Branch/Edge
ค าศัพท์ส าหรับ Tree
13
A
B D
E F GT
C
HLeaf Node
4. Leaf node (ลีฟโหนด) คือ Node ที่ไม่มีลูก Degree = 05. Branch Node Node ที่ไม่ใช่ Root , Leaf Degreeไม่เป็น 0
Degree : จ านวนลูก หรอื ต้นไม้ย่อยของแต่ละ node
3
2 1 2
ค าศัพท์ส าหรับ Tree
14
A
B D
E F G T
C
H
Descendant ของ A
5. Descendant ลูกหลาน / Successor ผู้มาทีหลังDescendant ของ node x คือ ทุก node ที่ link ต่อ x ลงมาทั้งหมด
ค าศัพท์ส าหรับ Tree
15
Direct Descendant ของA
Immediate Successor / Direct Descendant/ Son ลูกหลานโดยตรง
A
B D
E F G T
C
H
ค าศัพท์ส าหรับ Tree
16
A
B D
E F G T
C
H
B และ A คือ Ancestor ของ E และ F
6. Ancestor บรรพบุรุษ / Predecessor ผู้มาก่อน Ancestor ของ node x คือ ทุก node ที่ Link อยูเ่หนือ x
ค าศัพท์ส าหรับ Tree
17
A
B D
E F G T
C
H
B คือ Father ของ E และ F
7. Immediate Predecessor / Direct Ancestor / Father
ค าศัพท์ส าหรับ Tree
ค าศัพท์ส าหรับ Tree
8 . Level ของ node (ระดบั)
- ระยะทางตามแนวดิ่งของ node ว่าอยู่ห่างจาก root เท่าไร
- เป็นหมายเลขแสดงระดับของ node ในต้นไม้
- ถ้า node มีระดับ L
-> node ที่เชื่อมต่อจากมันมีระดับ L+1
9. Height หรือ ระดับ( Level )ที่สูงสุดของ tree 18
19
A
B D
E F G T
C
H
Level : 1 . . . . . . . . . . . . . .
Level : 2 . . .
Level : 3
Height : 3ค าศัพท์ส าหรับ Tree
20
A
B D
E F G T
C
H
Level : 0 . . . . . . . . . . . . . .
Level : 1. . .
Level : 2
Height : 3หนังสือบางเล่ม
ค าศัพท์ส าหรับ Tree
21
R
TS
U V WX
Y Z
RootLevel 1
Level ….
Level …
Level …..
Subtree ของ node …….
Son of ….
Father of ….
Ancestors of …….
Descendant of …..
Height of a tree = ……………………...
Brother node of …….
ค าศัพท์ส าหรับ Tree
22
Notation: Node, children, edge, parent, ancestor, descendant, path, depth,
height, level, leaf node, subtree.
R
TS
U V WX
Y Z
Root
Internal node
Leaf
Level 1
Level 2
Level 3
Level 4 SubtreeSon of T
Father of V
Ancestors of V
Descendant of T
Height of a tree = 1+ max(depth of a node) = 4
Brother node of U
depth of a node = จ านวน ของ edge จาก root - node
ค าศัพท์ส าหรับ Tree
23
R
TS
U V WX
Y Z
9. ปา่ (Forest)
TS
U V WX
Y Z
ค าศัพท์ส าหรับ Tree
Ordered Tree (ออรเ์ดอร์ทร)ี หรือ ต้นไมท้ีม่ีแบบ
แผน
• Tree ที่ node ใด ๆ มี subtree หรือ degree ตั้งแต่ 2
ขึ้นไป
• โหนดต่าง ๆ ของต้นไม้นั้นมีความสัมพันธ์ที่แน่นอนประการหนึ่ง เช่น
ก่อน , ไปทางขวา , ไปทางซ้าย
• ถา้ไมม่ีความสัมพนัธ์ที่แน่นอน เราเรียกวา่
Ordted tree 24
Ordered Tree
25
A
B C
D
I J
A
B
D
F E
C
Ordered Tree
Ordered Tree
ตัวอย่างโครงสร้างทรี
• นิพจนท์างคณิตศาสตร์
• Decision Trees
• การแยกประเภทหนังสือในห้องสมุด
26
Tree
เราสามารถใช้โครงสร้างของ Tree ในการแทนนิพจน์ทางคณิตศาสตร์
โดยจัดให้
1. node สาขา (Branch node) เป็น node ส าหรับเครื่องหมายการค านวณ
2. ส่วน node ปลาย (Leaf node) เป็น node ส าหรับตัวถูกกระท าของเครื่องหมายการค านวณน้ัน ๆ
27
นิพจน์ทางคณิตศาสตร์
28
V1 * V2 – (V3 + V4 ^ V5 )
Tree
• Tree ชนิดนี้มักเกิดขึ้นในการประยุกต์เกี่ยวกับการเล่นเกม
หรืองานเกี่ยวกับการสร้างแบบจ าลองเหตุการณ์
ตัวอย่างการน าไปใช้ในการเล่นเกม โดยแตล่ะ node
ของ tree จะใช้แทนการตัดสินใจว่าจะเล่นต่อไปอย่างไร
tree ที่ใช้แทนการเล่นเกมน้ีเรียก ทรีเกม ( Game Tree )
ซึ่งขนาดของ ทรีเกม มักจะมีขนาดใหญ่
29
Decision Trees
30
Decision Trees
• ระบบการจดัท า Catalog ของห้องสมดุ ส่วนใหญ่จะใช้
โครงสรา้งของทรี
เช่นตัวอย่างระบบดวิวี่ ( Dewey Decimal System )
ซึ่งจะจัดเปน็ระบบลดหลั่นลงมา โดยเริ่มจากความรู้กว้าง ๆ
ก่อน แล้วแยกออกเป็นแผนกย่อยตามสาขาวชิาที่ละเอียดขึ้น
หรือลักษณะการจดัท าสารบัญหนังสือ ที่มีการจัดท าเป็น
หัวข้อเรื่องใหญ่ และมหีัวข้อย่อยในแต่ละเรื่อง เป็นต้น
31
การแยกประเภทหนังสือในห้องสมุด
32
การแทนโครงสร้างต้นไม้ในคอมพิวเตอร์
Array Implementation
33
Linked Lists Implementation
34
Binary Tree(ต้นไม้ทวิภาค)
• ในแต่ละ node จะมี subtree หรือ degree ได้ไม่เกิน 2
• ถ้ามี subtree เดียว ต้องระบุดว้ยว่า เป็น node ทางซา้ย
หรือทางขวา ของ Root
35
T = NULL
Binary Tree
มองในเชิง Math ค าจ ากัดความของ Binary tree จะเป็นrecursive
• เป็น set จ ากดัของ node ที่อาจเป็น set ว่าง หรือประกอบด้วยnode ที่เรียก Root และ node ที่เหลือแบง่ออกเปน็ subtree ที่ไม่มี node ร่วมกัน โดย subtree กจ็ะเป็น binary tree ด้วย
• Left และ Right Subtree
36
T = NULL
Binary Tree
Binary Tree Example
37
Max depth = 3
Height = 4Right sonLeft son
Binary Tree
Complete Binary Trees
38
15
165
ความสัมพันธ์ระหว่างระดับและจ านวน node
n = 2l -1 เมื่อ l คือ max level
Binary Tree
3 12 201
Array Implementation
39
----10--8--6--4--2--Right Sibling
--9--7--5--3--1----Left Sibling
--------------108642Right Child
------------1197531Left Child
54433221100--Parent
11109876543210Position
Binary Tree
Linked List Implementation
40
DATA
RsonLson
Binary Tree
41
การแปลง Treeไปเป็น Binary Tree
การแปลง tree ไปเป็น binary tree • โครงสร้าง Tree มักมี degree > 2
• ดังนั้นการสร้างจึงต้องก าหนด เขตเชื่อมโยงให้พอ
• บาง node ใชค้รบ บาง node ไม่ครบ
42
การแปลง Tree ไปเป็น Binary Tree
43
R
TS
U V WX
Y Z
การแปลง Tree ไปเป็น Binary Tree
ขั้นตอน
1. ให้เช่ือม node ที่มีพ่อเดียวกัน ( node พี่น้อง) เข้าด้วยกัน
- ลบเส้นเชื่อมโยงจาก node ที่เป็นพ่อไปยังลูก ๆ ออกให้หมด
ยกเว้น ลูกที่อยู่ต าแหน่งซ้ายสุด
2. เลือก son ทางซ้ายและขวา ของแต่ละ node
- son ทางซ้าย คือ node ทีอ่ยู่ใต้ node นั้น
- son ทางขวา คือ node ที่อยู่ข้าง ๆ (ระดบัเดียวกัน / Brother )
44
การแปลง Tree ไปเป็น Binary Tree
45
เริ่มต้น A
B D
E F G T
C
H
1.ให้เชื่อม node ที่มีพ่อเดียวกัน ( node พี่น้อง) เข้าด้วยกัน
การแปลง Tree ไปเป็น Binary Tree
46
A
B D
F G T
C
H
ขั้นที่ 1
E
1.ให้เชื่อม node ที่มีพ่อเดียวกัน ( node พี่น้อง) เข้าด้วยกัน
การแปลง Tree ไปเป็น Binary Tree
47
A
B D
F G T
C
HE
1. ลบเส้นเชื่อมโยงจาก node ที่เป็นพ่อไปยัง ลูก ๆ ออกให้หมด ยกเว้น ลูกที่อยู่ต าแหน่งซ้ายสุด
ขั้นที่ 1-1
การแปลง Tree ไปเป็น Binary Tree
48
A
B
D
FG
T
C
H
Eเลือก son ทางซ้ายและขวา ของแต่ละ node
- son ทางซ้าย คือ node ทีอ่ยู่ใต้ node นัน้ - son ทางขวา คือ node ทีอ่ยู่ข้าง ๆ
(ระดับเดียวกัน / Brother )
ขั้นที่ 2
การแปลง Tree ไปเป็น Binary Tree
แบบฝึกหัด
49
จงแปลง Tree ให้เป็น Binary Tree
1
2
6
10
7
3 4 5
8 9
A
C
G
B
ED F
J K L M
CB
A
D
การแปลง Forest ไปเป็น binary tree
• ท าแบบเดียวกนักับ การแปลง tree ไปเป็น binary tree
• คือ เชื่อม Root เข้าด้วยกัน และท าในส่วนของ Subtree ด้วย
50
การแปลง Forest ไปเป็น Binary Tree
51
A
B
D
C
เริ่มต้น
E
GF H
J K
การแปลง Forest ไปเป็น Binary Tree
52
A
B
D
C
Step 1
E
GF H
J K
การแปลง Forest ไปเป็น Binary Tree
53
A
B
D
C
E
GF
HJ
KStep 2
การแปลง Forest ไปเป็น Binary Tree
54
Binary Search Tree
55
ต าแหน่งของการเอา node เข้าไปไว้ใน tree จะขึ้นกับข้อมูลที่เก็บในแต่ละ Node และลักษณะ Tree
*** ไม่สามารถก าหนด ต าแหน่งได้65
40 75
70 9530 55
35 80
โดยโครงสร้างของทรีแบบนี้ คือค่า key หลักในโหนดใด ๆ จะต้อง1. มากกว่าค่า key ของ node
ที่อยู่ทางซ้าย2. และน้อยกว่าค่า key ของ node
ที่อยู่ทางขวา
Binary Search Tree
56
โดยโครงสร้างของทรีแบบนี้ คือ ค่าkey หลักในโหนดใด ๆ จะต้อง1. มากกว่าค่า key ของโหนดที่อยู่ทางซ้าย2. และน้อยกว่าค่า key ของโหนดที่อยู่ทางขวา
65
40 75
70 9530 55
35 80
Binary Search Tree
57
โดยโครงสร้างของทรีแบบนี้ คือ ค่าkey หลักในโหนดใด ๆ จะต้อง1. มากกว่าค่า key ของโหนดที่อยู่ทางซ้าย2. และน้อยกว่าค่า key ของโหนดที่อยู่ทางขวา
65
40 75
70 9530 55
35 80
Binary Search Tree
58
Ken , 45
Jim , 35 Mandy , 15
Bobby , 60 Jone , 40 Patty , 60
John , 20
คีย์หลักคือชื่อหรืออายุ ?
Binary Search Tree
59
การสร้าง Binary Search Tree
- การสร้างจะ เป็นการ Add สมาชิก 1 ตัว ( node ) เข้าไปใน Tree
- เริ่มหาที่ Root เสมอ และท่องไปตาม node ต่าง ๆ ตามล าดับ เพื่อ
หาต าแหน่งที่เหมาะสมส าหรับ node ใหม่
Binary Search Tree
60
65
65ADD Root
65 40 75 30 55 35 70 95 80
Binary Search Tree
61
65
40
40ADD
65 40 75 30 55 35 70 95 80
การสร้าง Binary Search Tree
62
65
40 75
75ADD
65 40 75 30 55 35 70 95 80
การสร้าง Binary Search Tree
63
65
40 75
30
30ADD
65 40 75 30 55 35 70 95 80
การสร้าง Binary Search Tree
64
65
40
30 55
55ADD
75
65 40 75 30 55 35 70 95 80
การสร้าง Binary Search Tree
65
65
40
30 55
35
35ADD
75
65 40 75 30 55 35 70 95 80
การสร้าง Binary Search Tree
66
65
40 75
7030 55
35
70ADD
65 40 75 30 55 35 70 95 80
การสร้าง Binary Search Tree
67
65
40 75
7030 55
35
95ADD
95
65 40 75 30 55 35 70 95 80
การสร้าง Binary Search Tree
68
65
40 75
70 9530 55
35 80
80ADD
การสร้าง Binary Search Tree
69
65
40 75
70 9530 55
35 80
สรุป การสร้าง Binary search Tree ตามล าดับ ดังต่อไปนี้
65 40 75 30 55 35 70 95 80
การสร้าง Binary Search Tree
70
65
40 75
70 9530 55
35 80
40ADD
ซ้ า !! 1. ทิ้งไปเลย
การสร้าง Binary Search Tree
71
65
40 75
70 9530 55
35 80
40ADD
ซ้ า !!
2 . เก็บความถี่ Node ที่ซ้ า
2
การสร้าง Binary Search Tree
72
65
40 75
70 9530 55
35 80
40ADD
3. ใช้ List list มาเชื่อม40ซ้ า !!
การสร้าง Binary Search Tree
73
แบบฝึกหดั
สร้าง Binary Search Tree จากการ Add ข้อมูล
ตามล าดับ
65 40 30 70 75 55 35 95 80
การสร้าง Binary Search Tree
74
Complete Binary Tree
Complete Binary Trees
75
15
165
ความสัมพันธ์ระหว่างระดับและจ านวน node
n = 2l -1 เมื่อ l คือ max level
Complete Binary Tree
3 12 201
76
65
40 70
75 8035 55
Height : 3
จ านวน Node ทั้งหมด n
n = 2 l - 1 เมือ l คือ Max level ของ Tree
Complete Binary Tree
77
65
40 70
75 8035 55
Height : 3
Max level = 1 n = 21-1 = 1Max level = 2 n = 22-1 = 3Max level = 3 n = 23-1 = 7
Complete Binary Tree
78
65
40 70
75 8035 55
n = 2l-17 = 2l-1
2l = 7+1 = 8 = 23
ถ้า n = 7 node ได้ Complete Binary Tree มีความสูงเท่าใด ?
n = 2l-1n+1 = 2l
log2( n+1) = log2 2l
log2( n+1) = lHeight (l) = max level = log2( n+1)
Complete Binary Tree
79
การท่องเข้าไปในBinary Tree
(Binary Tree Traversals)
การท่องเข้าไปใน Binary Tree• การท่องเข้าไปใน Binary Tree คือ การเข้าไปเยี่ยม node ต่างๆ node ละ 1 ครั้ง จนครบทุก node
อย่างมีแบบแผน
• การเยี่ยมอาจเป็นการเข้าไปอ่านข้อมลู หรือ ประมวลผลใดๆ
• หลักการส าคัญของการท่องเข้าไปใน Binary Tree คือ เยี่ยม Root ( R ) , Subtree ด้านซ้าย ( TL ) , Subtree ด้านขวา ( TR )
ซึ่งมีอยู่ 3 วิธี (ขึ้นอยู่กับว่าจะเยี่ยมสว่นใดก่อน)1. Inorder Traversal
จะเยี่ยม TL R TR ( Root อยู่ข้างใน)2. Preorder Traversal
จะเยี่ยม RTL TR ( Root อยู่ก่อน)3. Postorder Traversal
จะเยี่ยม TL TR R ( Root อยู่หลัง)
80
การท่องเข้าไปใน Binary Tree• Binary Tree จะประกอบด้วย Subtree
และใน Subtree ประกอบด้วย Subtree ย่อยๆ อีก ดังนั้นเพื่อให้ง่าย จะแทน root ของ subtree ใดๆ ด้วย จะได้
81
A
B C
D E F
G H ILeft Subtree Right Subtree
Root node
E
G H I
A
C
F
B
D
Inorder Traversal
• Inorder Traversalจะเยี่ยม TL R TR ( Root อยู่ข้างใน)
1. เยี่ยม Left Subtree แบบ Inorder2. เยี่ยม Root3. เยี่ยม Right Subtree แบบ Inorder
82
A
B C
D E F
G H ILeft Subtree Right Subtree
Root node
Inorder Traversal
83
ดังนั้นการท่องเข้าไปใน Binary Tree ด้วยวิธี Inorder จะได้ DGBAECHFI
1 E
G H I
A
C
F
B
D
เข้าไปใน Subtree ย่อยสุดทางซ้ายก่อนแล้ว Root ของ Subtree นั้นแล้วเข้าไปใน Subtree ทางขวา
2
3
4
5
6
7
8
9
Preorder Traversal
• Preorder Traversalจะเยี่ยม RTL TR ( Root อยู่ก่อน)
1. เยี่ยม Root 2. เยี่ยม Left Subtree แบบ Preorder3. เยี่ยม Right Subtree แบบ Preorder
84
A
B C
D E F
G H ILeft Subtree Right Subtree
Root node
Preorder Traversal
85
ดังนั้นการท่องเข้าไปใน Binary Tree ด้วยวิธี Preorder จะได ้ ABDGCEFHI
3 E
G H I
A
C
F
B
D
เข้าไปใน Root ของ Subtree นั้นก่อนแล้วเข้าไปใน Subtree ทางซ้ายแล้วเข้าไปใน Subtree ทางขวา
4
2
1
6
5
8
7
9
Preorder Traversal
• Preorder Traversalจะเยี่ยม RTL TR ( Root อยู่ก่อน)
1. เยี่ยม Root
2. เยี่ยม Left Subtree แบบ Preorder3. เยี่ยม Right Subtree แบบ Preorder
86
A
B C
D E F
G H ILeft Subtree Right Subtree
Root node
Preorder Traversal
87
ดังนั้นการท่องเข้าไปใน Binary Tree ด้วยวิธี Preorder จะได ้ ABDGCEFHI
3 E
G H I
A
C
F
B
D
เข้าไปใน Root ของ Subtree นั้นก่อนแล้วเข้าไปใน Subtree ทางซ้ายแล้วเข้าไปใน Subtree ทางขวา
4
2
1
6
5
8
7
9
Postorder Traversal
• Postorder Traversalจะเยี่ยม TL TRR ( Root อยู่หลัง)
1. เยี่ยม Left Subtree แบบ Postorder2. เยี่ยม Right Subtree แบบ Postorder
3. เยี่ยม Root
88
A
B C
D E F
G H ILeft Subtree Right Subtree
Root node
Postorder Traversal
89
ดังนั้นการท่องเข้าไปใน Binary Tree ด้วยวิธี Postorder จะได ้ GDBEHIFCA
2 E
G H I
A
C
F
B
D
เข้าไปใน Subtree ทางซ้ายก่อนแล้วเข้าไปใน Subtree ทางขวาแล้วเข้าไปใน Root ของ Subtree นั้น
1
3
9
4
8
5
7
6
Tree Traversal
• Preorder
90
A
B C
D E F G
Tree Traversal
• Inorder
91
A
B C
D E F G
Tree Traversal
• Postorder
92
A
B C
D E F G
แบบฝึกหัด
93
จงท่องเข้าไปใน Binary Tree ต่อไปนี้ในแบบPreorder, Inorder และ PostOrder
A
B D
C
+
A -
* D
B C
A
B C
D
E
E
G
1.
2.
3.