Trees (2) University of Phayao Sanchai Yeewiyom School of Information & Communication Technology University of Phayao
Height of Tree Height of tree is the number of nodes on the longest path from the root to a leaf
Height of Tree Exp. A binary tree of height 3. ………………………..level 0 C ……………...level 2 D E F
Complete Binary Tree A binary tree of height h that is full down to level h-1 and has level h filled in from left to right.
Complete Binary Tree Exp. A B C
Incomplete Binary Tree Exp. A A B C B D E F D
Incomplete Binary Tree Exp. A B C E D F
AVL Tree Adel’son-Vel’skii and Landis แก้ปัญหาโครงสร้างของ Tree ไม่สมดุล (Unbalanced Binary Tree) โดยไม่อนุญาตให้ Tree มี node ลึกเกินไป ใช้หลักการของ Balanced Binary Tree เข้ามาช่วย
Balanced Binary Tree A binary tree in which the left and right subtrees of any node has heights that differ by at most 1.
Balanced Binary Tree Exp. A A B C B C D E F D
Unbalanced Binary Tree Exp. A B C E D F
Balance Factor = Height of TL - Height of TR ใช้ในการตรวจสอบว่าเป็น AVL Tree หรือไม่ ถ้า Balance Factor ของทุก node ใน tree มีค่า 0, 1 หรือ -1 ถือว่าเป็น AVL Tree คำนวณจาก Balance Factor = Height of TL - Height of TR
Balance Factor Exp. +1 A A -1 +1 B C B C D E F D
Balance Factor Exp. -2 A -1 B C -1 E D F
Unbalanced Binary Tree กรณีที่เกิด Unbalanced Binary Tree ต้องมีการปรับ Tree โดยใช้วิธีการหมุน (Rotation)
Tree Rotation การหมุนมี 2 วิธีคือ Single Rotation Double Rotation Single Right Rotation Single Left Rotation Double Rotation Double Right-Left Rotation Double Left-Right Rotation
Single Right Rotation
Single Left Rotation
Double Right-Left Rotation
Double Left-Right Rotation
Exp. AVL Tree สร้าง AVL Tree จากเลขจำนวนเต็ม 1 ถึง 7 ตามลำดับ
Exp. AVL Tree
Exp. AVL Tree
Exp. AVL Tree 4. เพิ่ม 7 มีปัญหาที่โหนด 5 ทำการ single left rotation ได้ดังรูป b)
Exp. AVL Tree
Exp. AVL Tree
Exp. AVL Tree
Exp. AVL Tree
Heap Tree Heap is a complete binary tree that 1. That is empty or 2.1 Whose root contains a priority value greater than or equal to the priority value in each of its children, and 2.2 Whose root has heaps as its subtrees
Heap Tree Exp. hi ≥ h2i and hi ≥ h2i+1 (i = 1,2,3,…,n/2) h1 h2 h3 h4
Heap Tree Exp. 90 60 70 30 20 45 65
Heap Add
Heap Add
Heap Remove
Heap Remove
B-Tree เป็น Tree ที่มีคุณสมบัติแบบหลายทิศทาง ออกแบบมาเป็นพิเศษเพื่อใช้ในการเก็บข้อมูลในดิสก์ของเครื่องคอมพิวเตอร์ ทรีแบบหลายทิศทางตามจำนวนของ m (Multiway tree of order m) หมายความว่า ในแต่ละ node จะมีเส้นที่เชื่อมโยงไปยัง node ลูกได้เท่ากับ m ดังนั้นแสดงว่าใน 1 node จะมี node ลูกได้ไม่มากกว่า m ข้อมูล และมีข้อกำหนดของ B-Tree ดังนี้ จำนวนของ Key ในแต่ละ node ที่ไม่ใช่ node ใบจะมีจำนวนของ Key เท่ากับ m -1 node ใบทั้งหมดจะอยู่ในระดับเดียวกัน node ทั้งหมดที่ไม่ใช่ node ใบยกเว้น node รากจะมี node ลูกได้น้อยที่สุด m/2 node node แม่ ในแต่ละ node ใบจะมี node ลูกได้ 1 ถึง m node node ใบจะมี Key ได้ไม่มากกว่า m – 1
B-Tree
การเพิ่ม node ใน B-Tree ในตัวอย่างนี้ กำหนดให้ m มีค่าเท่ากับ 5 และมีลำดับการเข้ามาของข้อมูลดังนี้ 1, 12, 8, 2, 25, 6, 14, 28, 17, 7, 52, 16, 48, 68, 3, 26, 29 และ 45 เพิ่มข้อมูล 1 : เป็นส่วนเริ่มต้น node ราก B-Tree ดังแสดงในรูป (a) เพิ่มข้อมูล 12 : เข้าไปใน node ราก B-Tree ดังแสดงในรูป (b) เพิ่มข้อมูล 8 : เข้าไปใน node ราก B-Tree ดังแสดงในรูป (c) เพิ่มข้อมูล 2 : เข้าไปใน node ราก B-Tree ดังแสดงในรูป (d)
การเพิ่ม node ใน B-Tree เพิ่มข้อมูล 25: เมื่อเพิ่ม 25 เข้าไปใน node รากแล้วข้อมูลที่อยู่ใน node รากมีค่าเท่ากับ m คือ 5 ดังแสดงในรูป (a) ซึ่งไม่เป็นไปตามข้อกำหนดข้อที่ 5 ของ B-Tree ดังนั้น จึงต้องแยกด้วยการนำค่ากลางของ node ราก คือ 8 ขึ้นไปเป็น node รากแทนดังแสดงในรูป (b) (a) (b)
การเพิ่ม node ใน B-Tree เพิ่มข้อมูล 6: เข้าไปใน node ข้อมูล <1, 2> ดังแสดงในรูป (a) เพิ่มข้อมูล 14: เข้าไปใน node ข้อมูล <12, 25> ดังแสดงในรูป (b) เพิ่มข้อมูล 28: เข้าไปใน node ข้อมูล <12, 14, 25> ดังแสดงในรูป (c)
การเพิ่ม node ใน B-Tree เพิ่มข้อมูล 17: เมื่อเพิ่มข้อมูล 17 เข้าไปใน node <12, 14, 25, 28> ทำให้ข้อมูลใน node มีจำนวนเท่ากับ 5 ดังแสดงในรูป (a) ซึ่งไม่เป็นไปตามข้อกำหนดของ B-Tree ดังนั้น นำค่ากลางคือ 17 ขึ้นไปรวมกับ node รากดังแสดงในรูป (b) (a) (b)
การเพิ่ม node ใน B-Tree เพิ่มข้อมูล 7: เข้าไปใน node ข้อมูล <1, 2, 6> ดังแสดงในรูป (a) เพิ่มข้อมูล 52: เข้าไปใน node ข้อมูล <25, 28> ดังแสดงในรูป (b) เพิ่มข้อมูล 16: เข้าไปใน node ข้อมูล <12, 14> ดังแสดงในรูป (c) เพิ่มข้อมูล 48: เข้าไปใน node ข้อมูล <25, 28, 52> ดังแสดงในรูป (d)
การเพิ่ม node ใน B-Tree เพิ่มข้อมูล 68: ข้อมูล 68 จะอยู่รวมกับ node <25, 28, 48, 52> ดังแสดงในรูป (a) ทำให้ไม่เป็นตามข้อกำหนดของ B-Tree ดังนั้น จึงนำคีย์ในตำแหน่งตรงกลางคือ 48 ขึ้นไปรวมกับ node รากดังแสดงผลการเพิ่ม 68 ในรูป (b)
การเพิ่ม node ใน B-Tree เพิ่มข้อมูล 3: ข้อมูล 3 ถูกเพิ่มเข้าไปใน node <1, 2, 6, 7> ดังแสดงในรูป (a) ทำให้มีข้อมูลภายใน node ไม่เป็นตามกำหนดของ B-Tree ดังนั้น นำข้อมูลตรงกลางคือ 3 ขึ้นไปรวมกับ node ราก ดังแสดงในรูป (b) (a) (b)
การเพิ่ม node ใน B-Tree เพิ่มข้อมูล 26: เข้าไปใน node ข้อมูล <25, 28> ดังแสดงในรูป (a) เพิ่มข้อมูล 29: เข้าไปใน node ข้อมูล <25, 26, 28> ดังแสดงในรูป (b)
การเพิ่ม node ใน B-Tree เพิ่มข้อมูล 45: ข้อมูล 45 จะถูกเพิ่มร่วมกับ node <25, 26, 28, 29> ดังแสดงในรูป (a) ซึ่งไม่เป็นไปตามข้อกำหนดของ B-Tree จึงนำข้อมูล 28 ไปร่วมกับ node ราก <3, 8, 17, 48> ทำให้จำนวนข้อมูลใน node รากไม่เป็นไปตามข้อกำหนดของ B-Tree จึงนำข้อมูล 17 ขึ้นไปเป็น node รากใหม่ ดังแสดงผลการเพิ่ม 45 ในรูปที่ (b)
การเพิ่ม node ใน B-Tree เพิ่มคีย์ใหม่ในตำแหน่งใบ ถ้าการเพิ่มคีย์เข้าไปในตำแหนงใบแล้วมีจำนวนคีย์เท่ากับค่า m จะต้องแยก node ใบออกเป็นสองกลุ่ม และนำคีย์ในตำแหน่งกลางขึ้นไปเป็น node พ่อแม่ ถ้าคีย์ในตำแหน่ง node รากถูกแยกเป็น 2 กลุ่ม จะทำให้คีย์ในตำแหน่งตรงกลางถูกกำหนดให้เป็น node รากใหม่
การลบ node ใน B-Tree การลบคีย์ใน B-Tree จะต้องลบข้อมูลในตำแหน่ง node ใบ ถ้าตำแหน่งคีย์ที่ต้องการลบอยู่ในตำแหน่งใบ และยังมีคีย์อื่นที่ไม่ใช้คีย์ที่ต้องการลบอยู่ใน node เดียวกัน ในกรณีนี้สามารถลบคีย์ออกจาก B-Tree ได้ทันที ถ้าตำแหน่งคีย์ที่ต้องการลบไม่ได้อยู่ในตำแหน่งใบ ให้ใช้หลักการ Inorder successor มาสลับตำแหน่งของคีย์ที่ต้องการลบกับคีย์ที่อยู่ในตำแหน่งใบ จึงลบคีย์ออกจาก B-Tree เมื่อลบคีย์แล้วส่งผลทำให้คีย์ที่อยู่ใน node มีจำนวนน้อยกว่าจำนวนของคีย์ที่กำหนดไว้ ให้พิจารณาดู node ในระดับพี่น้องดังต่อไปนี้
การลบ node ใน B-Tree ถ้า node ในระดับพี่น้องมีจำนวนของคีย์มากกกว่าหนึ่งคีย์ให้เลื่อนคีย์ในระดับพ่อแม่ลงมาแทนคีย์ที่ถูกลบไปและเลื่อนคีย์ในตำแหน่ง node พี่น้องขึ้นไปแทนคีย์ใน node พ่อแม่ที่ถูกเลื่อนลงไป ดังแสดงการเลื่อนตำแหน่งใน B-Tree
การลบ node ใน B-Tree ถ้า node ในระดับพี่น้องมีจำนวนของคีย์เท่ากับหนึ่ง ในกรณีนี้จะใช้หลักการรวมคีย์ โดยนำคีย์ในระดับพ่อแม่ลงไปรวมกับคีย์ในระดับพี่น้อง ดังแสดงการรวมคีย์ในรูป
การลบ node ใน B-Tree ตัวอย่าง การลบข้อมูลใน B-Tree กำหนดให้มีลำดับการลบข้อมูลคือ 52, 72, 69, 56 ใน B-Tree โดยกำหนดให้ m = 5 แสดงได้ดังนี้
การลบ node ใน B-Tree ลบข้อมูล 52: โดยนำ B-Tree ต้นแบบมาลบดังแสดงในรูป a เมื่อตรวจสอบข้อมูล 52 ที่ต้องการลบไม่ได้อยู่ในตำแหน่งใบต้องทำการสลับตำแหน่งข้อมูล 52 กับข้อมูลในตำแหน่งใบด้วยหลักการ Inorder successor คือข้อมูล 56 ดังแสดงในรูป (c) และทำการลบข้อมูล 52 ดังแสดงในรูป (d)
การลบ node ใน B-Tree ลบข้อมูล 72: นำ B-Tree ที่เพี่มข้อมูล 52 มาเป็นต้นแบบในการลบข้อมูล 72 เป็นข้อมูลที่อยู่ในตำแหน่งใบสามารถทำลบข้อมูล 72 ได้เลยดังแสดงในรูปที (b)
การลบ node ใน B-Tree ลบข้อมูล 69: นำ B-Tree เพิ่มข้อมูล 72 มาเป็นทรีต้นแบบในการลบข้อมูล ข้อมูล 69 อยู่ในตำแหน่งใบสามารถทำการลบข้อมูล 69 ได้ทันทีแต่เมื่อทำการลบข้อมูล 69 แล้วข้อมูลแม่มีลูกอยู่เพียง node เดียวซึ่งไม่เป็นตามกฎของ B-Tree ดังนั้นจึงทำการเลื่อนข้อมูลในลำดับพี่สองคือ <31, 43> มี 2 ข้อมูลดังนั้นจึงทำการเลื่อนข้อมูล 56 ลงมาแทนข้อมูล 69 และทำการเลือก 43 ขึ้นไปเป็น node รากแทน ดังแสดงในรูป (d)
การลบ node ใน B-Tree ลบข้อมูล 56: นำ B-Tree เพิ่มข้อมูล 69 มาเป็นต้นแบบ ข้อมูล 56 อยู่ในตำแหน่งใบสามารถลบข้อมูลได้ทันที แต่เมื่อลบไปแล้วแม่มีข้อมูลเพียงข้อมูลเดียวและเมื่อดู node ระดับพี่น้อง <31> มีเพียงข้อมูลเดียวดังนั้นต้องใช้หลักการเลื่อนข้อมูล 43 ไปร่วมกับ 31 ดังแสดงในรูปที่ (d)
Homework กำหนดข้อมูล 39 15 20 40 45 11 60 48 5 2 7 30 80 70 22 13 8 33 จงสร้าง BST จากโครงสร้าง tree ในข้อ 1 จงหา preorder, inorder, postorder traversal จากข้อ 1. จงเพิ่มข้อมูลลงใน tree ตามลำดับ 25 34 10 85 50 21 จากข้อ 2. จงลบข้อมูลลงใน tree ตามลำดับ 11 15 40 39 60 70 แล้วแสดงลักษณะของ tree
Homework กำหนดข้อมูล จงสร้างเป็น AVL-tree 40, 22, 75, 31, 15, 9 69,45,77,32,91,47,95,99 54,44,50,62,32,47,52,45 35,46,23,53,40,37,44,39