1 / 28

บทที่ 7 ต้นไม้( Tree)

บทที่ 7 ต้นไม้( Tree). วัตถุประสงค์ บอกลักษณะโครงสร้างข้อมูลแบบต้นไม้ได้ บอกลักษณะของไบนารีทรีได้ สามารถแปลงต้นไม้ใดๆ ให้เป็นต้นไม้แบบทวิภาคได้ อธิบายหลักการแทนที่ต้นไม้ในหน่วยความจำได้ แสดงการท่องไปในต้นไม้ได้แบบต่างๆ ได้ ประยุกต์ใช้ต้นไม้ในทางคณิตศาสตร์ได้ . ต้นไม้( Tree).

vilmaris
Télécharger la présentation

บทที่ 7 ต้นไม้( Tree)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. บทที่ 7 ต้นไม้(Tree) • วัตถุประสงค์ • บอกลักษณะโครงสร้างข้อมูลแบบต้นไม้ได้ • บอกลักษณะของไบนารีทรีได้ • สามารถแปลงต้นไม้ใดๆ ให้เป็นต้นไม้แบบทวิภาคได้ • อธิบายหลักการแทนที่ต้นไม้ในหน่วยความจำได้ • แสดงการท่องไปในต้นไม้ได้แบบต่างๆ ได้ • ประยุกต์ใช้ต้นไม้ในทางคณิตศาสตร์ได้

  2. ต้นไม้(Tree) โครงสร้างข้อมูลแบบไม่ต่อเนื่อง(non linear list) ที่มีลักษณะแตกกิ่งก้านสาขาออกไปเหมือนต้นไม้โดยมองจากล่างขึ้นบน โครงสร้างของข้อมูลจะใช้ความสัมพันธ์ของข้อมูลแบบลำดับชั้น เป็นตัวเชื่อมโยงระหว่างข้อมูล ซึ่งโครงสร้างข้อมูลแบบต้นไม้ จะประกอบด้วยโหนด(node) ตั้งแต่ 1 โหนดขึ้นไป และจะต้องมีต้นไม้ย่อย(subtree) ดังภาพ A B K H C M E G L D N O F I J

  3. ส่วนประกอบของต้นไม้(Tree)ส่วนประกอบของต้นไม้(Tree) • ต้นไม้ ประกอบด้วยโหนด A จนถึง O • ต้นไม้ย่อย(subtree) ของ A ได้แก่ B H และ K เป็นต้น ซึ่งการกล่าวถึงต้นไม้ย่อย จะรวมถึงโหนดในต้นไม้ย่อยนั้น • ต้นไม้ย่อยของ A=(BCEGDF) (H I J) (K L M N O) • ต้นไม้ย่อยของ B = (CD ) (E F) (G) • ต้นไม้ย่อยของ H = (I) (J) • ต้นไม้ย่อยของ K = (L) (M N O) A B K H C M E G L D N O F I J

  4. นิยามต้นไม้(Tree) • ดีกรีของโหนด(degree of node)หมายถึงจำนวนต้นไม้ย่อยในแต่ละโหนด เช่น ดีกรีของโหนด A=3 B=3 H=2 • โหนดที่เป็นใบ(leaf node) คือโหนดที่ไม่มีต้นไม้ย่อย หรือ มีดีกรีเป็นศูนย์ บางครั้งเรียกโหนดปลายทาง(terminal node) ได้แก่D F G I J L N O • โหนดที่เป็นกิ่ง(branch node) คือโหนดที่มีต้นไม้ย่อย หรือโหนดที่มีดีกรีไม่เท่ากับศูนย์เช่น ABCEHKM • ระดับของโหนด(level of node) คือ ระดับที่โหนดนั้นอยู่ในแนวดิ่ง โดยกำหนดให้โหนดที่เป็นราก มีระดับเป็น 1 จากรูปจะได้ว่า • - ระดับของโหนดที่ 1 ได้แก่ A - ระดับของโหนดที่ 2 ได้แก่ B H K • - ระดับของโหนดที่ 3 ได้แก่ C E G I J L M - ระดับของโหนดที่ 4 ได้แก่ D F N O • ความสูงของต้นไม้ (height หรือ depth) คือจำนวนระดับของต้นไม้ใดๆ เช่น ต้นไม้จากรูปมีความสูงเท่ากับ 4

  5. นิยามต้นไม้(Tree) • โหนดพ่อ(parent) คือโหนดรากของ ต้นไม้แต่ละต้น เช่น A เป็นพ่อของ BHK • โหนดพี่น้อง(brothers หรือ siblings) คือโหนดที่เกิดจากพ่อเดียวกัน เช่น BHK • โหนดพี่(oldest brothers) คือโหนดที่อยู่ทางซ้ายมือสุด เช่น B เป็นพี่ของ HK • โหนดน้อง(youngers) คือโหนดที่ถัดมาทางขวาของโหนดพี่ เช่น H • โหนดน้องสุดท้อง(youngest brothers) คือโหนดถัดมาทางขวาของโหนดน้อง เช่น K เป็นน้องสุดท้องของ BHK • โหนดลูกหลาน(decendants) คือ โหนดที่อยู่ต่อจากโหนดที่เป็นพ่อแม่ลงมาทั้งหมด เช่น O เป็นลูกหลานของ AKM • โหนดบรรพบุรุษ(ancestors) คือโหนดที่อยู่ก่อนโหนดที่กำหนดขึ้นไปเป็นสายเดียวกัน เช่น A เป็นบรรพบุรุษของ BHK

  6. ชนิดของต้นไม้ แบ่งตามการจัดลำดับของโหนดต้นไม้ย่อยได้ 2 ชนิด คือ 1. ต้นไม้แบบอันดับ(ordered tree) เป็นลักษณะการให้ความสำคัญของตำแหน่งของ โหนดเป็นหลักในการพิจารณาความแตกต่างระหว่างต้นไม้จากรูปถือว่า ต้นไม้ทั้งสี่ต้นไม่เหมือนกัน 2. ออเรนเต็ดทรี(Oriented tree)เป็นลักษณะที่ไม่ถือความสำคัญของตำแหน่งของโหนด จากรูป ถือว่าต้นไม้ทั้งสี่เป็นต้นเดียวกัน A A A A B C B C B C B C D E E D D E E D

  7. ป่า(Forest) คือ เซตของโหนดที่ไม่มีโหนดราก จากรูปเมื่อกล่าวถึงต้นไม้ จะได้โหนด A ถึงโหนด O และป่า จะหมายถึง กลุ่มของต้นไม้ที่เหลือที่ไม่มีราก ได้แก่ B HK A B K H C M E G L D N O F I J

  8. การแวะผ่านป่า(Forest) คือการนำโหนดในโครงสร้างต้นไม้ มาเขียนเรียงลำดับให้อยู่ในแนวเส้นตรง ซึ่งจะเขียนทีละระดับจากซ้ายไปขวา (level by level)มี 2 แบบ คือ 1. การแวะผ่านจากบนลงล่าง(top down traversal)คือการเริ่มแวะผ่านจากโหนดรากแล้วลงไปในระดับที่ 2 จากซ้ายไปขวาพอหมดก็ลงไประดับ 3 ไปเรื่อยๆ จากรูป จะได้ A BHK CEG IJLM DFNO 2. การแวะผ่านจากล่างขึ้นบน(bottom up traversal)คือการเริ่มแวะผ่านจากระดับที่อยู่ไกลจากโหนดรากมากที่สุดก่อน โดยทำจากซ้ายมาขวา จะได้ DFNO IJLM CEG BHK A A B K H C M E G L D N O F I J

  9. Binary Tree ต้นไม้แบบทวิภาคคือ ต้นไม้ที่มีกิ่งยื่นออกมา (out degree) ของทุกๆ โหนดน้อยกว่าหรือเท่ากับสองโหนด ซึ่งถ้ามีกิ่งยื่นออกมาเท่ากับสองหรือศูนย์ จะเรียกว่า ต้นไม้เต็มต้นแบบทวิภาค(full binary)หรือ ต้นไม้บริบูรณ์แบบทวิภาค(complete binary tree) ดังภาพแสดง binary tree

  10. Binary Tree ถ้าแต่ละโหนดมีดีกรีหรือจำนวนกิ่ง ที่ยื่นออกมา(out degree)สูงสุดเท่ากับสอง ซึ่งแต่ละโหนดมีต้นไม้ย่อยได้มากสุดเพียงสองต้นไม้ย่อย โดยเรียกต้นไม้ย่อยทางซ้ายว่า left sub tree หรือ left child และเรียกต้นไม้ย่อยทางขวาว่าright sub tree หรือ right child ดังภาพแสดง full binary tree

  11. การเปลี่ยน Tree ให้เป็น Binary Tree • ต้นไม้แบบออดินารี(ordinary)คือต้นไม้ที่มีดีกรีสูงสุดของแต่ละโหนดเป็นเท่าไรก็ได้ ซึ่งการเปลี่ยนให้เป็น binary tree เป็นการจัดให้แต่ละโหนดมีดีกรีสูงสุดเท่ากับสอง มีขั้นตอนดังนี้ • 1. พิจารณาที่กิ่งทางซ้ายสุดที่อยู่ใต้พ่อเดียวกัน • 2. ต่อกิ่งของโหนดทางซ้ายสุดในขั้นที่ 1 ไปทางขวาตามลำดับอาวุโสกับพี่น้องที่เกิดจากพ่อเดียวกัน • 3. ทำขั้นที่ 1 และ 2 จนครบทุกโหนด • 4. ปรับมุมของแต่ละกิ่ง ประมาณ 45 องศา

  12. การเปลี่ยน Tree ให้เป็น Binary Tree ขั้นที่ 1 ขั้นที่ 4 ขั้นที่ 2 ขั้นที่ 3

  13. การเปลี่ยน Tree ให้เป็น Binary Tree A ตัวอย่าง แสดงการเปลี่ยนต้นไม้ให้เป็นแบบทวิภาค โจทย์ A B F B F C K D G J C K D G J E H L I E H A L I B F ขั้นที่ 1-3 C G D J K ผลลัพธ์ E L H I

  14. การเปลี่ยน Forest ให้เป็น Binary Tree โจทย์ A S B C T U D E F G V W X Y Z A ผลลัพธ์ S B T C U D V G X E Y W F Z

  15. การเก็บ Binary Tree ในหน่วยความจำ • การเก็บต้นไม้ในหน่วยความจำแบบเรียงลำดับ(sequential link) • คือ การแทน binary treeด้วย full binary treeโดยใช้โครงสร้างข้อมูลแบบแถวลำดับชนิด 1 มิติมาช่วย โดยจะกำหนดหมายเลขให้กับโหนด เริ่มจาก 1 ถึง n และจะเริ่มจากโหนดรากก่อนเสมอ ซึ่งหมายเลขกำกับโหนดแต่ละตัวจะหมายถึงตำแหน่งที่อยู่ของโหนดด้วย 1 A 2 3 B C 6 4 D 5 7 1 2 3 4 5 6 7

  16. การเก็บ Binary Tree ในหน่วยความจำ 2. การเก็บต้นไม้ในหน่วยความจำแบบจัดสรรการเชื่อมโยง(link allocation) เป็นการแทนโครงสร้างต้นไม้ที่ใช้งานได้ดีกว่าแบบแถวลำดับเนื่องจากการแทรกและการลบโหนดออกจากโครงสร้างต้นไม้สามารถทำได้ไม่จำกัด และไม่เปลืองเนื้อที่สำหรับโหนดที่ขาดหายไป ดังนั้นในการแทนโครงสร้างต้นไม้แบบทวิภาคโดยใช้เทคนิคของวิธีการจัดสรรการเชื่อมโยงจะให้ความสำคัญของตำแหน่งต้นไม้ย่อยทางซ้ายและทางขวาซึ่งมีความแตกต่างกัน A B D C E F G

  17. การแวะผ่าน Binary Tree การแวะผ่านโหนด หมายถึง การเข้าไปในโครงสร้างต้นไม้เพื่อนำข้อมูลในโหนดมาแสดงหรือเพื่อการค้นหา หรือการประมวลผล การเดินเยี่ยมโหนดมี 3 วิธี 1. Inorder traversal หรือ Symmetric order จะทำการเยี่ยมโหนดในต้นไม้ย่อยทางซ้ายแบบอินออเดอร์ ก่อนเยี่ยมโหนดรากและเยี่ยมโหนดในต้นไม้ย่อยทางขวาแบบอินออเดอร์(Left/ Root/Right) 2. Preorder traversal จะทำการเยี่ยมโหนดรากก่อน เยี่ยมโหนดในต้นไม้ย่อยทางซ้ายแบบพรีออเดอร์ และเยี่ยมโหนดในต้นไม้ย่อยทางขวาแบบพรีออเดอร์(Root/ Left/ Right) 3. Postorder traversal หรือ Endorder จะทำการเยี่ยมโหนดในต้นไม้ย่อยทางซ้ายแบบ โพสออเดอร์ ก่อนเยี่ยมโหนดในต้นไม้ย่อยทางขวาแบบ โพสออเดอร์ และเยี่ยมโหนดราก(Left/ Right/ Root)

  18. การแวะผ่าน Binary Tree A 1. แบบอินออเดอร์(Left/ Root/Right) จากภาพจะได้ BAC 2. แบบพรีออเดอร์(Root/ Left/ Right)จากภาพจะได้ ABC 3. แบบโพสออเดอร์(Left/ Right/ Root)จากภาพจะได้ BCA 1. แบบอินออเดอร์(Left/ Root/Right)จากภาพจะได้ DB A EG C HFI 2. แบบพรีออเดอร์(Root/ Left/ Right) จากภาพจะได้ A BD CEG FHI 3. แบบโพสออเดอร์(Left/ Right/ Root)จากภาพจะได้ DB GE HIF C A B C A B C D E F G H I

  19. การประยุกต์ใช้ต้นไม้กับนิพจน์ทางคณิตศาสตร์การประยุกต์ใช้ต้นไม้กับนิพจน์ทางคณิตศาสตร์ • นิพจน์ทางคณิตศาสตร์ สามารถเขียนได้ 3 รูปแบบ คือ • 1. Infix Form คือการเขียนนิพจน์คณิตศาสตร์ ที่มีเครื่องหมายอยู่ระหว่างตัวกระทำ เช่น X * Y + Z • X – Y / R * D • A – B / C ^ R * S + D • 2. Prefix Form คือการเขียนนิพจน์คณิตศาสตร์ ที่มีเครื่องหมายอยู่หน้าตัวกระทำ • เช่น+ * X Y Z • - X * / Y R D • - A / B + * ^ C R S D • 3.Postfix Formคือการเขียนนิพจน์คณิตศาสตร์ที่มีเครื่องหมายอยู่หลังตัวกระทำ • เช่น X Y * Z + X Y R / D * - A B C R ^ / S * D - +

  20. Expression Tree คือต้นไม้ที่สร้างขึ้นจากตัวกระทำ(operand) และเครื่องหมาย(operators) ทางคณิตศาสตร์ของนิพจน์ โดยการวางตัวกระทำที่โหนดใบ(leavenode) และวางเครื่องหมายไว้ที่โหนดภายใน สำหรับเครื่องหมายที่เป็นเครื่องหมายเดี่ยว(unary operator)จะมีกิ่งต้นไม้ย่อยเพียงข้างเดียว เรามักจะวาง เครื่องหมายเดี่ยวไว้ทางซ้ายของตัวกระทำ ซึ่งเครื่องหมายที่จัดเป็นเครื่องหมายเดี่ยว ได้แก่ - log() cos() และมีเครื่องหมายเดี่ยว ที่ถูกจัดวางไว้ทางขวาของตัวกระทำ ได้แก่ แฟกทอเรียลฟังก์ชันเลขยกกำลังต่างๆ ตัวอย่าง แสดงการสร้าง เอ็กเพรสชันทรีแบบทวิภาค จากนิพจน์X * Y + Z + * Z X Y

  21. Expression Tree • ตัวอย่างแสดงการสร้างเอ็กเพรสชันทรีจากนิพจน์ (X – ((Y / R) * D)) • จะได้ว่า • การเยี่ยมโหนด แบบอินออเดอร์จะได้ X-Y/R*D ซึ่งอยู่ในรูปอินฟิกฟอร์ม • การเยี่ยมโหนด แบบพรีออเดอร์จะได้ -X*/YRD ซึ่งอยู่ในรูปพรีฟิกฟอร์ม • การเยี่ยมโหนด แบบโพสออเดอร์ จะได้ XYR/D*- ซึ่งอยู่ในรูปโพสฟิกฟอร์ม - X * / D Y R

  22. Binary Search Tree • มีลักษณะดังนี้ • 1. ค่าคงที่ที่อยู่ในโหนดของต้นไม้ย่อยทางซ้าย จะมีค่าน้อยกว่าค่าคงที่ที่เป็นโหนดราก • 2. ค่าคงที่ที่อยู่ในโหนดของต้นไม้ย่อยทางขวา จะมีค่ามากกว่าค่าคงที่ที่เป็นโหนดราก • 3. ต้นไม้ย่อยทางซ้ายและต้นไม้ย่อยทางขวา ก็จะมีลักษณะเหมือนกับโหนด 1 และ ข้อ 2 ด้วย • 4. เมื่อเยี่ยมโหนดแบบอินออเดอร์ข้อมูลที่ได้จะเรียงลำดับเสมอ

  23. Binary Search Tree ตัวอย่าง แสดงการสร้างต้นไม้ค้นหาแบบทวิภาคจากข้อมูลต่อไปนี้ 5 9 41 25 4 89 แล้วเยี่ยมโหนดแบบอินออเดอร์(Left/Root/Right) การเยี่ยมโหนดแบบอินออเดอร์จะได้ 4 5 9 25 41 89 5 4 9 41 25 89

  24. Binary Search Tree ตัวอย่าง แสดงสร้างต้นไม้ค้นหาแบบทวิภาค จากข้อมูลต่อไปนี้ 6 5 2 3 4 8 7 9 แล้วเยี่ยมโหนดแบบอินออเดอร์ การเยี่ยมโหนดแบบอินออเดอร์จะได้ 2 3 4 5 6 7 8 9 6 5 8 2 7 9 3 4

  25. Binary Search Tree การลบโหนดออกจากต้นไม้ค้นหาแบบทวิภาค การลบโหนดจะต้องคงสภาพของต้นไม้ไว้เช่นเดิม การลบโหนดออกอาจทำได้ 3 กรณี ดังนี้ 1. ลบโหนดที่เป็นใบ เช่น โหนด 4 7 9 2. ลบโหนดที่มีเพียงต้นไม้ย่อยทางซ้ายหรือทางขวา เช่น โหนด 2 หรือ 3 เมื่อลบแล้วจะนำโหนดย่อยมาวางแทน 3. ลบโหนดที่มีทั้งต้นไม้ย่อยซ้ายและต้นไม้ย่อยขวา เช่น โหนด 6 8 เมื่อลบแล้วจะนำโหนดที่อยู่ขวาสุดหรือซ้ายสุดของโหนดที่ถูกลบขึ้นมาแทนตำแหน่งที่ลบไป

  26. การลบข้อมูลออกจากต้นไม้ค้นหาแบบทวิภาคการลบข้อมูลออกจากต้นไม้ค้นหาแบบทวิภาค ตัวอย่าง แสดงการลบโหนด ณ ตำแหน่งต่างๆ แสดงการลบโหนดใบ เช่น 4 6 5 8 2 7 9 3 6 4 5 8 2 7 9 3

  27. การลบข้อมูลออกจากต้นไม้ค้นหาแบบทวิภาคการลบข้อมูลออกจากต้นไม้ค้นหาแบบทวิภาค แสดงการลบโหนดที่มีเพียงต้นไม้ย่อยทางซ้ายหรือทางขวา เช่น โหนด 2 แสดงการลบ 6 6 6 5 8 5 8 2 7 9 3 7 9 3 7 5 หรือ 5 8 3 8 3 9 7 9

  28. งาน 1. จงสร้าง Expression tree จากนิพจน์ต่อไปนี้ 1.1 A+S-D*F-E*D/C 1.2 D-S*A*D^F-E+W 1.3 Q+E-W*S-F*S/A*S 1.4 D/E*4-W*F^Y-U+I 1.5 W+E/R*T-G+F/D/T 2. จงสร้าง Binary Search Tree จากตัวเลข 5 6 9 8 7 4 18 2 19 3 3. จากข้อ 2 จงแสดงการลบ 9,4,7

More Related