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