8
บทที5 โครงสร้างข้อมูลแบบต้นไม้ (Tree Data Structure) โครงสร้างข้อมูลแบบต้นไม้ เป็นโครงสร้างชนิดไม่เชิงเส้นที่สําคัญที่สุดของโครงสร้างข้อมูล โครงสร้างต้นไม้มีความสัมพันธ์อย่างใกล้ชิดกับธรรมชาติของข่าวสารและวิธีการแปลงข่าวสารมาก โครงสร้างต้นไม้มีลักษณะทีสมชื่อของตนเอง เพราะมีลักษณะคล้ายกิ่งก้านของต้นไม้ ต้นไม้ตามธรรมชาติ จะงอกจากล่างไปบน ส่วนโครงสร้างข้อมูลที่มีลักษณะต้นไม้นันเราจะวาดหรือให้เจริญจากบนลงมาล่างดังรูป จุดที่มีการแตกกิ่งก้านสาขาออกไปจะเรียกว่าโหนด (node) โดยข่าวสารจะเก็บอยู่ที่โหนด กิ่งที่ตอระหว่าง โหนด จะแสดงความสัมพันธ์ระหว่างโหนดเรียกว่าลิงค์ (link) อนึ่งตามรูป () จุดปลายของกิ่งจะเรียกว่า โหนด ด้วย ! โครงสร้างข้อมูลแบบต้นไม้ ! เป็นโครงสร้างไม่เชิงเส้น (Non Linear) มีลักษณะคล้ายกิ่งก้านต้นไม้ แตกกิ่งก้านออกไป เช่นเดียว กับธรรมชาติของข่าวสารข้อมูล ! ต้นไม้แตกกิ่งจากล่างไปบน แต่โครงสร้างข้อมูลในคอมพิวเตอร์จะกลับหัว รากอยู่บน กิ่งอยู่ด้านล่าง ! จุดที่แตกกิ่งออกไป เรียกว่าโหนด (Node) ข่าวสารเก็บอยู่ที่โหนด ! จุดเชื่อมโหนดเรียกว่าลิงค์ (Link) ! นิยามโครงสร้างต้นไม้ ! มีโหนดพิเศษเรียกว่า รากหรือรูต (root node), R ! โหนดอื่น ที่ไม่ใช่รูต ถูกแบ่งย่อยออกเป็น n กลุ่ม แต่ละกลุ่มไม่มีโหนดร่วมกันเลย แต่ละกลุ่ม ก็เป็นต้นไม้เหมือนกัน แต่เรียกว่าเป็นต้นไม้ย่อย (Sub tree) ! โครงสร้างต้นไม้ ! R คือรูตโหนดของต้นไม้ย่อย A,B,C,D ! A คือรูตโหนดของต้นไม้ย่อย E, F, G ! F คือรูตโหนดของต้นไม้ย่อย J ! B คือรูตโหนดของต้นไม้ย่อย H และ I () ต้นไม้ตามธรรมชาติ () โครงสร้างข้อมูลแบบต้นไม้

บทที่5 โครงสร้างข้อมูลแบบต้นไม้ Tree Data Structure · บทที่5 โครงสร้างข้อมูลแบบต้นไม้Tree

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: บทที่5 โครงสร้างข้อมูลแบบต้นไม้ Tree Data Structure · บทที่5 โครงสร้างข้อมูลแบบต้นไม้Tree

บทที่ 5 โครงสร้างข้อมูลแบบต้นไม้ (Tree Data Structure)

โครงสร้างข้อมูลแบบต้นไม้ เป็นโครงสร้างชนิดไม่เชิงเส้นที่สําคัญที่สุดของโครงสร้างข้อมูล

โครงสร้างต้นไม้มีความสัมพันธ์อย่างใกล้ชิดกับธรรมชาติของข่าวสารและวิธีการแปลงข่าวสารมาก โครงสร้างต้นไม้มีลักษณะที่สมชื่อของตนเอง เพราะมีลักษณะคล้ายกิ่งก้านของต้นไม้ ต้นไม้ตามธรรมชาติ จะงอกจากล่างไปบน ส่วนโครงสร้างข้อมูลที่มีลักษณะต้นไม้นั้นเราจะวาดหรือให้เจริญจากบนลงมาล่างดังรูป จุดที่มีการแตกกิ่งก้านสาขาออกไปจะเรียกว่าโหนด (node) โดยข่าวสารจะเก็บอยู่ที่โหนด กิ่งที่ต่อระหว่าง โหนด จะแสดงความสัมพันธ์ระหว่างโหนดเรียกว่าลิงค์ (link) อนึ่งตามรูป (ข) จุดปลายของกิ่งจะเรียกว่า โหนด ด้วย                          ! โครงสร้างข้อมูลแบบต้นไม้

! เป็นโครงสร้างไม่เชิงเส้น (Non Linear) มีลักษณะคล้ายกิ่งก้านต้นไม้ แตกกิ่งก้านออกไป เช่นเดียว กับธรรมชาติของข่าวสารข้อมูล

! ต้นไม้แตกกิ่งจากล่างไปบน แต่โครงสร้างข้อมูลในคอมพิวเตอร์จะกลับหัว รากอยู่บน กิ่งอยู่ด้านล่าง ! จุดที่แตกกิ่งออกไป เรียกว่าโหนด (Node) ข่าวสารเก็บอยู่ที่โหนด ! จุดเชื่อมโหนดเรียกว่าลิงค์ (Link)

 ! นิยามโครงสร้างต้นไม้

! มีโหนดพิเศษเรียกว่า รากหรือรูต (root node), R ! โหนดอื่น ๆ ที่ไม่ใช่รูต ถูกแบ่งย่อยออกเป็น n กลุ่ม แต่ละกลุ่มไม่มีโหนดร่วมกันเลย แต่ละกลุ่ม

ก็เป็นต้นไม้เหมือนกัน แต่เรียกว่าเป็นต้นไม้ย่อย (Sub tree) ! โครงสร้างต้นไม้

! R คือรูตโหนดของต้นไม้ย่อย A,B,C,D ! A คือรูตโหนดของต้นไม้ย่อย E, F, G ! F คือรูตโหนดของต้นไม้ย่อย J ! B คือรูตโหนดของต้นไม้ย่อย H และ I

 

(ก) ต้นไม้ตามธรรมชาติ (ข) โครงสร้างข้อมูลแบบต้นไม้

Page 2: บทที่5 โครงสร้างข้อมูลแบบต้นไม้ Tree Data Structure · บทที่5 โครงสร้างข้อมูลแบบต้นไม้Tree

  2

 การเรียกชื่อส่วนต่าง ๆ ของต้นไม้ ลักษณะลําดับของโครงสร้างต้นไม้ จะเรียกเช่นเดียวกับการลําดับ

บรรพบุรุษ เช่น Father, Son, Grandson บางทีก็ลําดับอีกแบบเช่น Mother, Child, Grandchild ระดับของโหนด (Level) แสดงถึงระยะทางตามแนวดิ่งว่าโหนดนั้นห่างจากรูตโหนดเท่าไร ถ้ากําหนด

ให้รูตโหนดเป็นระดับ 1 (บางที่กําหนดให้รูตโหนดเป็นระดับ 0) ให้นับระยะห่างบวกระดับของรูตโหนด เช่น 3 + 1 (หรือ 3 + 0) เป็นต้น

! ระดับของโหนด

! R คือรูตโหนด ระดับ 1 ! A,B,C,D คือโหนดระดับ 2 ! E,F,G,H,I คือโหนดระดับ 3 ! J คือโหนดระดับ 4

• ดีกรีของโหนด (Level Degree) ! คือจํานวนต้นไม้ย่อยของโหนดนั้น ! A มีดีกรี เป็น 3 ! B มีดีกรี เป็น 2 ! F มีดีกรีเป็น 1 ! C,D,E,G,H,I,J มีดีกรีเป็น 0

 ! โหนดที่เป็นใบ (Leaf Node) คือโหนดที่มีดีกรีเป็น 0 ส่วนโหนดที่มีดีกรีมากกว่า 0 เรียกว่า

โหนดภายใน (interior/branch node) ! A,B,F เป็นโหนดภายใน ! C,D,E,G,H,I,J เป็นโหนดใบ

 ความสัมพันธ์ของโครงสร้างต้นไม้

กําหนดให้โหนดราก (Root) คือ จุดยอด V0 และ x, y, z เป็นจุดยอดในต้นไม้ และ (V0 , V1 , ….,Vn ) เป็นทางเดินในต้นไม้จะกล่าวว่า 1) Vn-1 เป็น บิดามารดา (Parent) ของ Vn 2) V0,…,Vn-1 เป็น บรรพบุรุษ (Ancestor) ของ Vn 3) Vn เป็น ลูก (Child) ของ Vn-1 4) ถ้า x เป็นบรรพบุรุษของ y จะได้ว่า y เป็น ผู้มาทีหลัง (Descendant) x 5) ถ้า x และ y เป็นลูกของ z จะได้ x และ y เป็น พี่น้องกัน (Siblings) 6) ถ้า x ไม่มีลูก x จะเป็น จุดยอดที่สิ้นสุด (Leaf Node) หรือใบไม้ 7) ถ้า x ไม่ใช่จุดยอดที่สิ้นสุด x จะเป็น จุดยอดภายใน (Internal vertex) หรือ กิ่ง 8) กราฟย่อยของ T ประกอบด้วยจุดยอด x และโหนดที่มาทีหลังนับจากบรรพบุรุษของมันทั้งหมด โดยมีโหนด x เป็นราก และเรียกว่า ต้นไม้ย่อยของต้นไม้ที่มีราก x    

Page 3: บทที่5 โครงสร้างข้อมูลแบบต้นไม้ Tree Data Structure · บทที่5 โครงสร้างข้อมูลแบบต้นไม้Tree

  3

   

   

ความสัมพันธ์ของโครงสร้างต้นไม้ ป่า (Forest) คือ โครงสร้างต้นไม้ที่นําเอาโหนดราก (Root) ออกไปเหลือเฉพาะต้นไม้หรือกิ่งของโครงสร้างต้นไม้นั้น ๆ

ป่าที่ประกอบด้วยต้นไม้ A ,B และ X

โครงสร้างต้นไม้แบบทวิภาค (Binary Tree) โครงสร้างต้นไม้ทวิภาค (Binary Tree) คือ ต้นไม้ที่มีโหนดราก (Root) และทุกจุดยอดอาจมีลูก (Child) ทางซ้าย, ลูกทางขวา, ลูกทางซ้ายและลูกทางขวา หรือไม่มีลูกเลย โครงสร้างต้นไม้ทวิภาคแบบสมบูรณ์ (Complete Binary Tree) คือ โครงสร้างตน้ไม้ทวิภาคที่ทุก จุดยอดมีลูกทั้งสองด้านหรือไม่มีลูกเลย      

Page 4: บทที่5 โครงสร้างข้อมูลแบบต้นไม้ Tree Data Structure · บทที่5 โครงสร้างข้อมูลแบบต้นไม้Tree

  4

                                                             

แสดงโครงสร้างต้นไม้ทวิภาค (Binary Tree)  โครงสร้างต้นไม้ทั่วไป (General Trees)  โครงสร้างต้นไม้ทั่วไป คือ เซตจํากัด T ที่มีสมาชิกเรียกว่าโหนด ซึ่งประกอบด้วยคุณลักษณะดังนี้

1. T เป็นต้นไม้ว่าง (Null Tree หรือ Empty Tree) หรือ 2. T มีสมาชิกพิเศษ คือ โหนด R อยู่หนึ่งโหนดที่เรียกว่า Root Node 3. สมาชิกที่เหลือของ T อาจประกอบด้วยต้นไม้ย่อยที่มีจํานวนสมาชิกเป็นศูนย์หรือมากกว่า ได้แก่ T1, T2 , …, Tท การแทนโครงสร้างต้นไม้ คือ การแทนความสัมพันธ์ที่เกิดขึ้นจากรูปโครงสร้างต้นไม้ด้วยรูปที่สามารถประมวลผลด้วย คอมพิวเตอร์ ซึ่งแบ่งออกเป็น 2 วิธี ได้แก ่

1. การแทนโครงสร้างต้นไม้ด้วยโครงสร้างอาร์เรย์ (Array) การแทนโครงสร้างต้นไม้ด้วยโครงสร้างอาร์เรย์จะต้องใช้อาร์เรย์อย่างน้อย 3 ชุดสําหรับเป็น

ที่เก็บของข้อมูลและพอยน์เตอร์ที่ชี้ไปยังโหนดลูกทางด้านซ้ายและด้านขวา

แสดงการแทนโครงสร้าง ต้นไม้ด้วยอาร์เรย์  

Page 5: บทที่5 โครงสร้างข้อมูลแบบต้นไม้ Tree Data Structure · บทที่5 โครงสร้างข้อมูลแบบต้นไม้Tree

  5

การแทนโครงสร้างต้นไม้ทวิภาค (Binary Trees) การแทนด้วยอาร์เรย์จะใช้อาร์เรย์ที่ขนานกันจํานวน 3 ชุด คือ INFO, LEFT และ RIGHT และ

ตัวแปร ROOT ถ้าให้ K คือตําแหน่งของโหนดจะได้ความสัมพันธ์ ดังนี้ 1. INFO [K] เก็บส่วนที่เป็นข้อมูลของโหนด N 2. LEFT [K] เก็บตําแหน่งของ Left ของโหนด N 3. RIGHT [K] เก็บตําแหน่งของ Right Child ของโหนด N 4. ROOT เก็บตําแหน่งของ Root ของต้นไม้ T

     2. การแทนโครงสร้างต้นไม้ด้วยโครงสร้างรายการเชื่อมโยง (Linked List) คือ การใช้โครงสร้างข้อมูล Linked List มาแทนต้นไม้ โดยแต่ละโหนดจะประกอบด้วย 3 ส่วน คือ Left , Info ,Right โดย ส่วน Left จะเป็นตัวเชื่อมไปยังต้นไม้ย่อยในระดับถัดไปที่อยู่ทางซ้าย , Right จะชี้ไป ยังต้นไม้ย่อยในระดับถัดไปทางด้านขวา Info จะเก็บข้อมูลของโหนด และต้นไม้ย่อยที่ว่าง (ไม่มีต้นไม้ย่อยต่อ อยู่) แสดงด้วย X สําหรับค่า NULL    

แสดงการแทนโครงสร้าง ต้นไม้ทวิภาคด้วยอาร์เรย์

Page 6: บทที่5 โครงสร้างข้อมูลแบบต้นไม้ Tree Data Structure · บทที่5 โครงสร้างข้อมูลแบบต้นไม้Tree

  6

                                        การเข้าถึงข้อมูลในโครงสร้างต้นไม้ทวิภาค (Tree Traversal)

การนําต้นไม้ไบนารีมาใช้ประโยชน์นั้น หมายความว่าเราต้องมีวิธี เดิน หรือ traverse เข้าไปในต้นไม้ อย่างมีแบบแผน เพื่อไป เยี่ยม โหนดต่าง ๆ โหนดละ 1 ครั้ง คําว่า เยี่ยมหมายถึงว่าเราจะไปยังโหนดเพื่อ ประมวลผลบางอย่างที่ต้องการกระทํากับ โหนดนั้น เช่น หาข่าวสาร ดังนั้นผลลัพธ์จากการเดินเข้าไปในต้นไม้ คือจะได้ข่าวสารที่เก็บ(หรือชี้) โดยโหนดเหล่านั้นออกมาในรูปเชิงเส้น ซึ่งนําไปใช้ประโยชน์ได้ ความคิดเริ่มต้น ของการเดินก็คือ เข้าไปแต่ละโหนดพร้อมทั้งต้นไม้ย่อยทางซ้ายและทางขวาของโหนดนั้น ตามแนวความคิดนี้ เราจะแยกต้นไม้ไบนารีออกเป็น 3 ส่วนคือ R,TL,TR โดยที่ R จะแทนรูตโหนด TL จะแทนต้นไม้ย่อยทางซ้าย และ TR จะแทนต้นไม้ย่อยทางขวา จะเห็นได้ว่าจะมีวิธีเดินอยู่ 6 ทางคือ R TL TR , TL RTR , TL TR R , TR RTL , R TR TL สัญลักษณ์ที่เขียนนี้เป็นลักษณะการนิยามแบบรีเคอร์ซีฟและลําดับจากซ้ายไปขวา ถึงแม้ว่า จะมีวิธีเดิน 6 วิธี แต่เราจะสนใจเพียง 3 วิธีแรกเท่านั้น ซึ่ง 3 วิธีแรกมีชื่อเรียกพิเศษและลักษณะรายละเอียด การเดินดังนี้ 1) การเข้าถึงข้อมูลแบบพรีออร์เดอร์ (Preorder) R TL TR เยี่ยม R เดินเข้าไปใน TL (ของ R) อย่างพรีออร์เดอร์ เดินเข้าไปใน TR (ของ R) อย่างพรีออร์เดอร์ 2) การเข้าถึงข้อมูลแบบอินออร์เดอร์ (Inorder) TL RTR เดินเข้าไปใน TL (ของ R) อย่าง อินออร์เดอร์ เยี่ยม R เดินเข้าไปใน TR (ของ R) อย่างอินออร์เดอร์ 3) การเข้าถึงข้อมูลแบบโพสท์ออร์เดอร์ (Preorder) TL TR R เดินเข้าไปใน TL (ของ R) อย่าง โพสต์ออร์เดอร์ เดินเข้าไปใน TR (ของ R) อย่างโพสต์ออร์เดอร์ เยี่ยม R อีก 3 วิธี เกิดจากการสับเปลี่ยน ตําแหน่ง TL และ TR ของ 3 วิธีที่กล่าวมาแล้ว ดังนั้น 3 วิธีหลังจะมีชื่อคล้าย ๆกับ 3 วิธีแรก เพียงแต่มีคําว่า reverse เพิ่มเข้าไปเท่านั้น ดังนั้น 3 วิธีหลังจะมีชื่อดังนี้

4) แบบ reverse pre - order traversal ( R TR TL ) 5) แบบ reverse in - order traversal ( TR RTL ) 6) แบบ reverse post - order traversal ( TR TL R)

 

แสดงการแทนโครงสร้างต้นไม้ทวิภาคด้วยรายการเช่ือมโยง

Page 7: บทที่5 โครงสร้างข้อมูลแบบต้นไม้ Tree Data Structure · บทที่5 โครงสร้างข้อมูลแบบต้นไม้Tree

  7

ลําดับ Preoder Inorder Postorder 1 ประมวลผลที่ Root ค้นหาทางซ้ายของ R ค้นหาทางซ้ายของ R 2 ค้นหาทางซ้ายของ R ประมวลผลที่ Root ค้นหาทางขวาของR 3 ค้นหาทางขวาของR ค้นหาทางขวาของR ประมวลผลที่ Root

 การเข้าถึงข้อมูลในโครงสร้างต้นไม้ทวิภาค

สังเกตว่า แต่ละวิธีจะประกอบด้วยขั้นตอนที่เหมือนกัน และต้นไม้ย่อยทางซ้ายของ Root ของถูกประมวลผลก่อนต้นไม้ย่อยทางขวามือ วิธีการทั้ง 3 บางครั้งเรียกว่า โหนด-ซ้าย-ขวา (Node-Left-Right : NLR) ,ซ้าย-โหนด-ขวา (Left-Node-Right : LNR) และ ซ้าย-ขวา-โหนด (Left-Right-Node : LRN) แต่ละวิธีการเป็นการกําหนดแบบ เรียกตัวเอง (Recursive) เนื่องจากอัลกอริทึมมีการค้นหาต้นไม้ย่อยในลําดับ ที่กําหนด ซึ่งต้องใช้โครงสร้างสแตกเมื่อมีการทํางานด้วยคอมพิวเตอร์  

                                                                               

ลักษณะต้นไม้แบบนิยาม Recursive

Preorder = * + a – b c / - d e - + f g h Inorder = a + b - c * d – e / f + g – h

Postorder = a b c - + d e – f g + h - / *

Page 8: บทที่5 โครงสร้างข้อมูลแบบต้นไม้ Tree Data Structure · บทที่5 โครงสร้างข้อมูลแบบต้นไม้Tree

  8

โครงสร้างต้นไม้แบบ THREADED TREE คือ การนําไบนารีทรีมีการปรับปรุงแก้ไขโดยวิธีการดําเนินการแบบรายการเชื่อมโยง โดยมีการเพิ่ม

โหนดพิเศษที่เรียกว่า โหนดนำ (Header Node) ไว้ที่จุดเริ่มต้นของ T และกําหนดให้ HEAD เป็นพอยน์เตอร์ ที่ชี้ไปยัง Header Node และพอยน์เตอร์ทางซ้ายของ Header Node จะชี้ไปยัง Root ของทรี

                                                       

แสดงโครงสร้างต้นไม้ที่มี Header Node