Binary Search Tree สาขาวิชาคอมพิวเตอร์และเทคโนโลยี อ.เลาขวัญ งามประสิทธ์ ิ นิยามของโครงสร้างข้อมูล Binary Search Tree • ทุกโหนดที่อยู่ทางด้าน sub-tree ด้านซ้ายจะต้องมีค่าน้ อยกว่า root • ทุกโหนดที่อยู่ทางด้าน sub-tree ด้านขวา จะต้องมีค่ามากกว่าหรือ เท่ากับ root • แต่ละ.

Download Report

Transcript Binary Search Tree สาขาวิชาคอมพิวเตอร์และเทคโนโลยี อ.เลาขวัญ งามประสิทธ์ ิ นิยามของโครงสร้างข้อมูล Binary Search Tree • ทุกโหนดที่อยู่ทางด้าน sub-tree ด้านซ้ายจะต้องมีค่าน้ อยกว่า root • ทุกโหนดที่อยู่ทางด้าน sub-tree ด้านขวา จะต้องมีค่ามากกว่าหรือ เท่ากับ root • แต่ละ.

Binary Search Tree
สาขาวิชาคอมพิวเตอร์และเทคโนโลยี
อ.เลาขวัญ งามประสิทธ์ ิ
นิยามของโครงสร้างข้อมูล Binary Search Tree
• ทุกโหนดที่อยู่ทางด้าน sub-tree ด้านซ้ายจะต้องมีค่าน้ อยกว่า root
• ทุกโหนดที่อยู่ทางด้าน sub-tree ด้านขวา จะต้องมีค่ามากกว่าหรือ
เท่ากับ root
• แต่ละ sub-tree จะต้องมีคณ
ุ สมบัติตามข้อ 1 และ 2
ตัวอย่าง binary search tree
5
7
(a)
8
(b)
9
20
15
5
2
5
12
(c)
32
43
24
(d)
ตัวอย่าง binary tree
ที่ไม่จดั ว่าเป็ น binary search tree
2
4
12
8
7
1
20
18
(a)
15
43
24
32
5
(b)
(c)
การดาเนินการของ binary search tree
• Traversal
• Search
• Insert
• Delete
ท่องไปใน binary search tree
เหมือนกับการท่องใน binary tree คือ
- Preorder
- Inorder
- Postorder
ค้นหาโหนดที่ต้องการ
แทรกโหนด
ลบโหนด
Inorder Traversal
• Inorder-tree(x)
1. If x != NULL
2.
then Inorder-tree(left of x)
3.
print x
4.
Inorder-tree(right of x)
Preorder Traversal
• Preorder-tree(x)
1. If x != NULL
2.
then print x
3.
Preorder-tree(left of x)
4.
Preorder-tree(right of x)
Postorder Traversal
• Postorder-tree(x)
1. If x != NULL
2.
then Postorder-tree(left of x)
3.
Postorder-tree(right of x)
4.
print x
การลบโหนดออกจาก Tree
1. กรณี ที่โหนดนัน้ เป็ น leaf สามารถลบออกได้เลย
2. กรณี ที่โหนดนัน้ มี 1 child
3. กรณี ที่โหนดนัน้ มี 2 children
การลบโหนดออกจาก Tree:
กรณี ที่โหนดนัน้ มี 1 child
12
7
12
20
15
before
7
20
15
after
การลบโหนดออกจาก Tree:
กรณี ที่โหนดนัน้ มี 2 child
12
7
12
7
20
15
before
43
15
7
20
15
20
43
43
after
Replace the key of this node with the smallest key of right subtree.
แหล่ งความรู้ เพิม่ เติม
Animated Binary Search Tree 1
Animated Binary Search Tree 2
http://www.cs.jhu.edu/~goodrich/dsa/trees/btree.html http://www.qmatica.com/DataStructures/Trees/BST.html
AVL
Tree
สาขาวิชาคอมพิวเตอร์และเทคโนโลยี
อ.เลาขวัญ งามประสิทธ์ ิ
นิยามของ AVL Tree
• Tree นัน้ จะต้องเป็ น binary search tree
• Tree นัน้ จะต้องเป็ น Balanced tree
Balanced tree หมายถึง ทุกโหนดใน tree ต้องมีความสูงของ
left sub-tree และ right sub-tree ต่างกันไม่เกิน 1
Balance Factor = |HL – HR|  1
ตัวอย่างการตรวจสอบ AVL Tree
12
2
0
7
20
15
5
0
1
1
43
0
Node5
Node15
Node43
Node20
Node7
Node12
HL = 0, HR = 0
HL = 1, HR = 0
HL = 0, HR = 0
HL = 2, HR = 1
HL = 0, HR = 0
HL = 1, HR = 3






เกิด Imbalance ที่โหนด 12
ดังนัน้ tree นี้ ไม่เป็ น AVL Tree
BF = |0 - 0| = 0
BF = |1 - 0| = 1
BF = |0 - 0| = 0
BF = |2 - 1| = 1
BF = |0 - 0| = 0
BF = |1 - 3| = 2
พิจารณาว่า Tree ต่อไปนี้ เป็ น AVL Tree หรือไม่
11
1
1
3
1
24
0
18
13
0
1
0
34
1
เป็ น AVL Tree
86
0
พิจารณาว่า Tree ต่อไปนี้ เป็ น AVL Tree หรือไม่
25
1
2
1
14
8
3
43
1
32
0
29
เกิด Imbalance ที่โหนด 14 และ 56
0
0
56
41
2
0
74
0
ดังนัน้ ไม่เป็ น AVL Tree
0
72
0
81
Unbalanced Tree
•
•
•
•
Left of Left
Right of Right
Right of Left
Left of Right
Left of Left
• เกิดเมื่อมีการแทรกโหนดเข้าไปด้าน sub-tree ฝั่งซ้ายของโหนดลูก
ทางซ้าย
เกิด Imbalance
11
5
3
2
11
24
5
7
3
2
24
7
Right of Right
• เกิดเมื่อมีการแทรกโหนดเข้าไปด้าน sub-tree ฝั่งขวาของโหนดลูก
ทางขวา
เกิด Imbalance
11
5
11
24
15
5
45
24
15
82
45
82
Right of Left
• เกิดเมื่อมีการแทรกโหนดเข้าไปด้าน sub-tree ฝั่งขวาของโหนดลูก
ทางซ้าย
เกิด Imbalance
11
5
11
24
3
10
6
5
24
3
10
6
Left of Right
• เกิดเมื่อมีการแทรกโหนดเข้าไปด้าน sub-tree ฝั่งขวาของโหนดลูก
ทางซ้าย
เกิด Imbalance
11
5
11
24
15
5
45
18
24
15
45
18
การทา Balancing Tree
• Single rotation
การหมุน 1 ครัง้ ใช้กรณี เกิด Left of Left และ Right of Right
• Double rotation
การหมุน 2 ครัง้ ใช้กรณี เกิด Right of Left และ Left of Right
Single rotation : rotate right
Rotate Right
เกิด Imbalance
C
B
A
A
B
C
ตัวอย่าง
28
10
24
2
56
12
11
49
30
5
28
11
49
10
5
24
2
12
30
56
ตัวอย่าง
Rotate Right
11
5
3
2
5
24
7
3
2
11
7
24
Single rotation : rotate left
Rotate Left
เกิด Imbalance
A
A
B
C
B
C
ตัวอย่าง
13
5
2
4
20
7
26
12
38
20
13
12
26
5
4
20
2
7
20
38
ตัวอย่าง
11
5
24
24
15
11
5
45
82
45
15
82
Double rotation : left of right
N1
เกิด Imbalance
N2
N3
N3
N1
M
N2
N
P
O
M
N
O
P
ตัวอย่าง
11
5
15
24
15
11
45
18
5
24
18
45
Double rotation : right of left
เกิด Imbalance
Rotate Right
N3
N2
N1
N3
N1
P
N2
M
N
M
O
N
O
P
ตัวอย่าง
11
5
10
24
3
10
6
5
3
11
6
24
ตัวอย่าง algorithm : rotate left
จงสร้าง AVL Tree จากข้อมูลที่นาเข้ามาตามลาดับ
ดังต่อไปนี้ โดยให้แสดงผล Balance Factors ด้วย
1) 23, 54, 34, 2, 14, 7, 26, 16, 87, 21, 9
2) 5, 23, 57, 8, 12, 45, 21, 36, 28, 4, 22, 13, 27
แหล่ งความรู้ เพิม่ เติม
Animated AVL Tree 1
Animated AVL Tree 2
http://www.cs.jhu.edu/~goodrich/dsa/trees/avltree.html
http://www.qmatica.com/DataStructures/Trees/AVL/AVLTree.swf