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