1. Depth-first
แบ่งเป็นท้งั หมด 6 แบบแต่มี 3 แบบที่นิยมใช้ ไดแ้ ก่
NLR LNR LRN
51
แบบ Preorder
NLR
algorithm preOrder (val root <node pointer>)
1 if (root is not null)
1 process(root)
2 preOrder(root->leftSubtree)
3 preOrder(root->rightSubtree)
2 return
52
แบบ Inorder
LNR
algorithm inOrder (val root <node pointer>)
1 if (root is not null)
1 inOrder(root->leftSubtree)
2 process(root)
3 inOrder(root->rightSubtree)
2 return
53
แบบ Postorder
LRN
algorithm postOrder (val root <node pointer>)
1 if (root is not null)
1 postOrder(root->leftSubtree)
2 postOrder(root->rightSubtree)
3 process(root)
2 return
54
2. Breath-first
algorithm breathFirst (val root <node pointer>)
1 p = root
2 while (p not null)
1 process(p)
2 if (p->left not null)
1 enqueue(p->left)
3 if (p->right not null)
1 enqueue(p->right)
4 if (not emptyQueue)
1 dequeue(p)
else
1 p = null
3 return
55
Binary Tree Application
1. Expression Tree
2. Huffman Code
56
Binary Tree กบั นิพจนค์ ณิตศาสตร์
+
A*
BC
InOrder : A + B * C
PreOrder : +A*BC
PostOrder : ABC*+
57
Binary Tree กบั นิพจนค์ ณิตศาสตร์
* C
+
AB
InOrder : (A + B) * C
PreOrder : *+ABC
PostOrder : AB+C*
58
Binary Tree กบั นิพจนค์ ณิตศาสตร์
+
A*
-^
B CD *
E F
InOrder : A + (B - C) * (D ^ (E * F))
PreOrder : +A*-BC^D*EF
PostOrder : ABC-DEF*^*+
59
Binary Tree กบั นิพจนค์ ณิตศาสตร์
^ C
+*
A *+
B CA B
InOrder : (A + B * C) ^ ((A + B) * C)
PreOrder : ^+A*BC*+ABC
PostOrder : ABC*+AB+C*^
60
Binary Tree กบั นิพจนค์ ณิตศาสตร์
+
A*
BC
InOrder : A + B * C
PreOrder : +A*BC
PostOrder : ABC*+
61
Binary Tree กบั นิพจนค์ ณิตศาสตร์
* C
+
AB
InOrder : (A + B) * C
PreOrder : *+ABC
PostOrder : AB+C*
62
Binary Tree กบั นิพจนค์ ณิตศาสตร์
+
A*
-^
B CD *
E F
InOrder : A + (B - C) * (D ^ (E * F))
PreOrder : +A*-BC^D*EF
PostOrder : ABC-DEF*^*+
63
Binary Tree กบั นิพจนค์ ณิตศาสตร์
^ C
+*
A *+
B CA B
InOrder : (A + B * C) ^ ((A + B) * C)
PreOrder : ^+A*BC*+ABC
PostOrder : ABC*+AB+C*^
64
แบบฝึ กหดั
1. จากตน้ ไมต้ ่อไปน้ี จงหาลาดบั การประมวลผลแบบ Depth-first
ท้งั หมด
แบบ Pre-Order (NLR) ได้แก่ A ,B,C,D,E,F,G,H,I,J,K
แบบ In-Order(LNR) ได้แก่ D,C, E, B, A, F, H, G, I,J,K
แบบ Post-Order(LRN) ได้แก่ D,E,C, B,H,K,J,I,G,F,A
65
2. จากตน้ ไมต้ ่อไปน้ี จงหาลาดบั การประมวลผลแบบ Breath-first
66
1. Expression Tree
หมายถึง Binary Tree ท่ีมีคุณสมบตั ิดงั ต่อไปน้ี
1. Leaf เกบ็ Operand
2. Root และ Internal node เกบ็ Operator
3. Subtree เป็น Subexpression
67
ตวั อย่าง
68
การท่องใน Expression Tree
1. Pre-order Traversal Prefix Expression
2. Post-order Traversal Postfix Expression
3. In-order Traversal Infix Expression
69
1. Preorder Traversal
1 if (root is not null)
1 print(root->token)
2 prefix(root->leftSubtree)
3 prefix(root->rightSubtree)
2 return
+*a+bcd
70
2. Postorder Traversal
1 if (root is not null)
1 postfix(root->leftSubtree)
2 postfix(root->rightSubtree)
3 print(root->token)
2 return
a bc+*d+
71
3. Inorder Traversal
((a*(b+c))+d) 1 if (root is not null)
1 if root->token is operand
1 print(root->token)
else
1 print(open parenthesis)
2 infix(root->leftSubtree)
3 print(root->token)
4 infix(root->rightSubtree)
5 print(close parenthesis)
2 return
72
การสร้าง Expression Tree จาก Postfix
Expression
พจิ ารณาทีละ Token จนหมด
ถา้ Token เป็น Operand
สร้าง Node แลว้ Push ลง Stack
ถา้ Token เป็น Operator
Pop ข้ึนมา 2 ตวั เชื่อมเป็น Tree โดยใช้ Operator
แลว้ Push ลง Stack
ตวั อยา่ ง
จากนิพจน์ Postfix
abc+*d+
จะได้ Expression Tree ดงั น้ี
74
แบบฝึ กหดั
1. จงแสดง Expression Tree แบบ Infix
A* B / C + D – ( E+ F ) + (H-I)
พร้อมท้งั Tree traversal แบบ
In-Order, Pre-Order, Post-Order และ Breath-first
75
2. จงแสดง Expression Tree จากนิพจน์ Infix ที่
กาหนดให้ พร้อมท้งั หานิพจน์ Prefix และนิพจน์ Postfix
จาก Expression Tree ท่ีได้
(C + D + A * B) * (E + F)
76
1. (100-2*(4+12)-1*5)*3
2. 7-3*4/2^2+5-(8^2/3*9)
3. 20-10*(8/2+4-3^2)+7
4. 23*2/3^3-(4+6*5+9/2^2)
77
(100-2*(4+12)-1*5)*3
78
A* B / C + D – ( E+ F ) + (H-I)
79
General Tree
หมายถึง Tree ท่ีสามารถมี Outdegree ไดไ้ ม่จากดั
จานวน
80
การแปลง General Tree เป็น Binary Tree
มี 3 ข้นั ตอน ดงั น้ี
1. ระบุ Child ที่อยทู่ างซา้ ยสุด
2. เช่ือม Sibling เขา้ ดว้ ยกนั
3. ลบ Branch ที่ไม่ตอ้ งการ
81
ตวั อย่าง การแปลง General Tree เป็น Binary Tree
Binary Search Tree
มีคุณสมบตั ิเป็น Binary Tree โดยท่ี 5
8
ลูกทางซา้ ยตอ้ งนอ้ ยกวา่ Parent
ลูกทางขวาตอ้ งมากกวา่ Parent 7 11
ถา้ ขอ้ มูลซ้า จะไม่เกบ็
2
83
การใส่ข้อมูลใน Binary Search Tree 84
15 5 12 20 3 18 10 19
15
5 20
3 12 18
10 19
นกั ศึกษาจะพบวา่ ทุก Node ทาง Left Sub Tree จะนอ้ ยกวา่ Root
ทุก Node ทาง Right Sub Tree จะมากกวา่ Root
15 5 12 20 3 18 10 19
85
คุณลกั ษณะของ Binary Search Tree
ในการคน้ หาขอ้ มูล ทาไดเ้ ร็ว คือไม่เกิน Height+1 (ความสูงของ tree+1) เช่น
Tree น้ี Height = 3 สมมุติวา่ ตอ้ งการหาวา่ 19 มีหรือไม่
จะใชจ้ านวนคร้ังในการหา = 4 คร้ัง คือท่ี Node 15, 20, 18, 19
15
5 20
3 12 18
10 19 86
Binary Search Tree
87
นิยามของโครงสร้างข้อมลู Binary Search Tree
ทุกโหนดที่อย่ทู างด้าน sub-tree ด้านซ้ายจะต้องมีค่าน้อยกว่า
root
ทุกโหนดท่ีอย่ทู างด้าน sub-tree ด้านขวา จะต้องมีค่ามากกว่า
หรือเท่ากบั root
แต่ละ sub-tree จะต้องมีคณุ สมบตั ิตามข้อ 1 และ 2
88
ตวั อย่าง binary search tree
5 L<N<R 5
9
(a) 12 32
7 20 24
5
28 15 43 (d)
(b) (c) 89
ตวั อย่าง binary tree
ท่ีไม่จดั ว่าเป็น binary search tree
2 12 1
7 20 18
48
15 43 24 32
(a) 5
(c)
(b) 90
การดาเนินการของ binary search tree
Traversal ท่องไปใน binary search tree
เหมือนกบั การท่องใน binary tree คือ
Search
Insert - Preorder
Delete - Inorder
- Postorder
ค้นหาโหนดที่ต้องการ
แทรกโหนด
ลบโหนด
91
92
93
Lซา้ ยสุดของยอ่ ย R Rขวาสุดของโหนดลบ
94
95
96
แหล่งความรู้เพม่ิ เตมิ
Animated Binary Search Tree 1 Animated Binary Search Tree 2
http://www.cs.jhu.edu/~goodrich/dsa/trees/b http://www.qmatica.com/DataStructures/Trees/B
tree.html ST.html
97
แบบฝึ กหดั
จงแปลงตน้ ไมต้ ่อไปน้ีเป็น Binary Tree
Bill
John Josep Mary
Smith
Rose Jack Brian May Sarah
Jay Jim Joe Joey Ben Tom
98
จงแปลงให้อย่ใู นรปู binary search tree และ ทาการค้นหา ทงั้ 3
วิธี MOD 5
56 20 6 90 35 49 43 70 85 67
77 67 43 23 6 92 39 25 49 80
ลบ 39,77
39 40 2 7 8 80 75 60 78 4 25
(ลบ 7 , 40,39)
99
100