ทรี ( Trees )
ลิสต์แบบไม่ใช่เชิงเส้น(Non-Linear Lists) คือลิสต์ที่สมาชิกแต่ละตัวสามารถมีทรีเปรียบเสมือนกับต้นไม้ที่มีราก (Root) และมีลำต้นที่แผ่กิ่งก้านสาขา โดยแต่ละ
สมาชิกตัวถัดไป(Successor) ได้มากกว่าหนึ่งตัว ลิสต์แบบไม่ใช่เชิงเส้นนี้สามารถแบ่งออกเป็น
2 ประเภทด้วยกัน คือ ทรีและกราฟ (Trees and Graphs) สำหรับโครงสร้างข้อมูลแบบทรี สมา
ชิกแต่ละตัวยกเว้นรูทโหนดจะมีสมาชิกตัวก่อนหน้า (Predecessor) เพียงหนึ่งตัว ในขณะที่โครง
สร้างข้อมูลแบบกราฟ สมาชิกแต่ละตัวสามารถมี Predecessorมากกว่าหนึ่ง
กิ่ง(Branch)ก็จะมีการผลิใบ (Leaf) ไปทั่ว ซึ่งเป็นไปตามความสัมพันธ์ในลักษณะแบบลำดับชั้น
(Hierarchical Relationship) และตัวทรีมีโครงสร้างแบบลำลับชั้นนี้เอง จึงมักนำไปใช้เพื่อนำ
เสนอเป็นแผนผังองค์กร (Organization Chart) โครงสร้างไดเรกทอรี (Diractory) หรือแม้กระ
ทั่งสมาชิกครอบครัวของทรีเอง
ทรีประกอบด้วยโหนด (Node) ที่ใช้สำหรับบรรจุข้อมูล โดยจะมีกิ่งซึ่งเป็นเส้นที่เชื่อม
โยงโหนดเข้าด้วยกันที่เรียกว่าบรานช์ (Branch) จำนวนของบรานช์ที่สัมพันธ์กับโหนดเรียกว่าดีกรี
(Degree) และ ถ้าหากทรีนั้นเป็นทรีที่ไม่ใช่ที่ว่าง โหนดแระจะเรียกว่ารูท (Root) โดยโหนดทุก ๆ
โหนดยกเว้นรูทโหนดจะมีเพียง 1 Predecessor ในขณะที่ Successor อาจเป็น 0 หรือ 1 หรือ
มากกว่า 1 ก็ได้
สำหรับ Leaf ก็คือโหนดใบที่ไม่มีบรานช์เชื่อมโยงไปยังโหนดตัวถัดไป กล่าวคือ โหนด
ใบก็คือโหนดใบที่ไม่มีตัวตามหลังหือ Successor นั่นเอง ในขณะที่โหนดพ่อ (Parent) จะมีโหนดตามหลัง หรือกล่าวอีกนัยหนึ่งว่าโหนดที่มีตัวก่อนหน้าก็คือโหนดลูก (Child) โดยที่โหนดลูกตั้งแต่
สองโหนดหรือมากกว่าที่มาจากพ่อเดียวกันจะเรียกว่าโหนดพี่น้อง (Siblings) สำหรับความสัมพันธ์
อื่น ๆ ภายในครอบครัวของทรีไม่ว่าจะเป็น ลุง ป้า น้า อา หรือหลาน เหลน โหลนนั้น ไม่มีความจำ
เป็นต้องนำมาใส่ใจขอให้พิจารณาเพียงความสัมพันธ์หลักตัวใหญ่ ๆ ก็เพียงพอ เช่น บรรพบุรุษ
(Ancestor) หรือลูกหลาน (Descendent) เป็นต้น
โหนดต่าง ๆ ภายในทรีจะอยู่ในระดับที่แตกต่างกัน โดยเริ่มต้นจากรูทโหนด ซึ่งถือเป็น
ระดับแรกสุด (Level 0) ส่วนลูก ๆ ของรูทโหนดก็คือระดับที่ 1 (Level 1) และลูก ๆของโหนดในระ
ดับที่1 ก็จะอยู่ในระดับที่ 2 (Leve l ) ซึ่งจะเพิ่มระดับไปเรื่อย ๆ เมื่อมีลูกหลานเพิ่มขึ้น ดังนั้นในการ
คำนวณระดับความสูงหรือความลึกของทรีจะคำนวณได้จากการนำค่าระดับสูงสุด (Leaf Node) ของ
ทรีนั้นมาบวกด้วย 1รูปที่ 6.1 ทรี (Tree)เมื่อได้เข้าถึงศัพท์ต่าง ๆ ที่เกี่ยวข้องกับทรีแล้ว ต่อไปนี้ทำการพิจารณาทรีจากรูปที่
6.1เพื่อนำไปประกอบคำอธิบายให้เข้าใจดียิ่งขึ้น ดังรายละเอียดต่อไปนี้
- โหนดแรก (Root Node)
คือโหนด A ซึ่งโหนดรากหรือรูทโหนด ถือเป็นโหนดแรกสำหรับโครงสร้างทรีที่ใช้เป็น
โหนดเริ่มต้น เพื่อขยายลูกหลานต่อไป
- โหนดพ่อ (Parents) คือโหนด A,B และ F ซึ่งก็คือโหนดที่มี Successor
- โหนดลูก (Children) คือโหนด B,E,F,C,D,G,H และ I ซึ่งก็คือโหนดที่มี Predecessor
- โหนดพี่น้อง (Siblings) คือโหนด {B,E,F},{C,D}และ{G,H,I}
- โหนดใบ (Leaf Node) คือโหนด C,D,E,G,H และ I ซึ่งก็คือโหนดที่ไม่มี Successor- ดีกรีทั้งหมดของทรี มีค่าเท่ากับ 8- ดีกรีทั้งหมดของโหนด F มีค่าเท่ากับ 3- จำนวนของ Leaf โหนด มีค่าเท่ากับ 6- ระดับความสูงหรือความลึกของทรี คำนวณได้จากสูตร Height =2+1=3นอกจากนี้ ทรียังสามารถแบ่งย่อยออกเป็นซับทรี (Subtrees) หรือเรียกว่าทรีย่อย
ซึ่งซับทรีเหล่านี้จะเป็นโครงสร้างที่มีการเชื่อมโยงถัดจากรูทโหนด สำหรับโหนดแรกของซับทรีก็
คือรูทโหนดของซับทรีนั้น ๆ และยังใช้เป็นชื่อเรียกของซับทรีนั้นด้วย นอกจากนี้ซับทรียังสามารถ
แบ่งส่วนย่อยออกเป็นซับทรีย่อย ๆ ได้อีก
1จงอธิบายลักษณะโครงสร้างเชิงแตกต่างจากโครงสร้างไม่เป็นเส้นอย่างไร
ตอบ โครงสร้างเชิงเส้นจะมีสมาชิกตัวถัดไปเพียงตัวเดียว แต่โครงสร้างเชิงเส้น จะมีสมาชิกตัวถัดไปหลายตัวโดยการแตกสาขา
2.จงอธิบายการสร้างไบนารีทรีโดยใช้อาร์เรย์เป็นอย่างไร
ตอบ การสร้างไบนารี่ทรีโดยใช้อาร์เรย์ จะได้ทรีที่มีจำนวนโหนดแน่นอน ตามขนาดของอาร์เรย์
3.ชุดปฏิบัตการของไบนารี่ทรีโดยใช้ลิ้งลิสต์มีอะไรบ้าง
ตอบInfo(p) เป็นการส่งค่าที่เก็บอยู่ในโหนดที่ p ชี้กลับมาให้
Left(p) เป็นการส่งโหนดลูกด้านซ้ายของโหนดที่ p ชี้กลับมาให้
Right(p) เป็นการส่งโหนดลูกด้านขวาของโหนดที่ p ชี้กลับมาให้
Father(p) เป็นการส่งโหนดพ่อของโหนดที่ p ชี้กลับมาให้
4.ชุดปฏิบัติการของลิงค์ลิสต์มีอะไรบ้าง และมีขั้นตอนการทำงานอย่างไร
ตอบ1.Node(p) ส่งโหนดที่ถูกชี้ด้วยต้วแปรพอยเตอร์ P กลับมาให้
2.Info (P) ส่งค่าในส่วนเก็บข้อมูลของโหนดที่ถูกชี้ด้วยตัวแปรพอยเตอร์ p กลับมาให้
3.Next(P) ส่งพอยเตอร์ในส่วนขอบการเชื่อมต่อโหนดที่ถูกชี้ด้วยตัวแปรพอยเตอร์ P กลับมาให้
5.จงอธิบายและแสดงลำดับขั้นตอนารเพิ่มโหนดใหม่ไว้ที่ท้ายของลิ้งค์ลิสต์
ตอบ1.สร้างโหนดใหม่โดยให้ New ชี้ไปยัง Node ใหม่ :Next(New)=Null
2.Info (New)=Data เช่นให้เท่ากับ 5
3.P= ชี้ไปยัง Node สุดท้าย
6.จงอธิบายและแสดงลำดับขั้นตอนการลบโหนดออกจากลิ้งค์ลิสต์
ตอบ1. P=first คือ P มาชี้ที่ Node แรก
2.First=Net(First) ให้ First ไปชี้ที่ Node ที่ 2
3.Free(P) ทำการลบ Node ที่ P ชี้อยู่
7.จงอธิบายลิงค์ลิสต์วงกลมมีลักษณะและการใช้งานเป็นอย่างไร
ตอบ วิธารที่ทำให้สามารถวิ่งจากโหนดหนึ่งไปยังอีกโหนดอื่น ๆ ได้ในลิ้งค์ลิสต์โดยให้ตัวชี้ของโหนดสุดท้ายชื่อในค่า Null ที่ให้ชี้กลับไปยังโหนด แรกแทน
การใช้งาน
มีการเพิ่มหัวรายการเข้ามาในตอนต้นหรือท้ายลิ้งค์ลิสต์วงกลมการวิ่งไปแต่ละโหนดจะทราบได้ว่าจุดสิ้นสุดอยู่ตรงไหนโดยใช้โหนดหัวรายการ
8.จงอธิบายลิ้งลิสต์สองทางมีลักษณะและการใช้งานเป็นอย่างไร
ตอบ เป็นลิ้งค์ลิสต์ที่มีตัวชี้สองทางทั้งซ้ายและขวา การทำงานของลิ้งค์ลิสต์อาจต้องวิ่งไปยังโหนดต่างๆ ในลิ้งค์ลิสต์โดยการถอยหลังกลับไปยังโหนดก่อนหน้าหรือลบแต่โหนด
9.จงอธิบายยลักษณะไบนารี่เสิร์ชทรีเป็นอย่างไร
ตอบ ไบนารี่เสิร์ชทรี (Binary Search Tree, BST) เป็นไบนารี่ทรีที่รวบรวมค่าของ N เรคคอร์ดซึ่งเป็นคีย์ (Key) ตั้งแต่ K1 , K2 ,…….Kn โดยแต่ละโหนด Ri จะมี Ki เพียงคีย์เดียวสำหรับ i=1,2,….,N คีย์เป็นค่าสร้างความแตกต่าง (Identifier) ให้แต่ละโหนด
9.Depth-first Order
ตอบ การวิ่งในแนวลึกก่อน
10.Binary Search Tree
ตอบ ไบนารี่เสิร์ชทรี