ทรี ( Trees )
ลิสต์แบบไม่ใช่เชิงเส้น(Non-Linear Lists) คือลิสต์ที่สมาชิกแต่ละตัวสามารถมี
สมาชิกตัวถัดไป(Successor) ได้มากกว่าหนึ่งตัว ลิสต์แบบไม่ใช่เชิงเส้นนี้สามารถแบ่งออกเป็น
2 ประเภทด้วยกัน คือ ทรีและกราฟ (Trees and Graphs) สำหรับโครงสร้างข้อมูลแบบทรี สมา
ชิกแต่ละตัวยกเว้นรูทโหนดจะมีสมาชิกตัวก่อนหน้า (Predecessor) เพียงหนึ่งตัว ในขณะที่โครง
สร้างข้อมูลแบบกราฟ สมาชิกแต่ละตัวสามารถมี Predecessorมากกว่าหนึ่ง
ทรีเปรียบเสมือนกับต้นไม้ที่มีราก (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
ระดับแรกสุด (Level 0) ส่วนลูก ๆ ของรูทโหนดก็คือระดับที่ 1 (Level 1) และลูก ๆของโหนดในระ
ดับที่1 ก็จะอยู่ในระดับที่ 2 (Leve l ) ซึ่งจะเพิ่มระดับไปเรื่อย ๆ เมื่อมีลูกหลานเพิ่มขึ้น ดังนั้นในการ
คำนวณระดับความสูงหรือความลึกของทรีจะคำนวณได้จากการนำค่าระดับสูงสุด (Leaf Node) ของ
ทรีนั้นมาบวกด้วย 1
ทรี (Tree)
เมื่อได้เข้าถึงศัพท์ต่าง ๆ ที่เกี่ยวข้องกับทรีแล้ว ต่อไปนี้ทำการพิจารณาทรีจากรูปที่
เพื่อนำไปประกอบคำอธิบายให้เข้าใจดียิ่งขึ้น ดังรายละเอียดต่อไปนี้
เพื่อนำไปประกอบคำอธิบายให้เข้าใจดียิ่งขึ้น ดังรายละเอียดต่อไปนี้
- โหนดแรก (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
โหนดเริ่มต้น เพื่อขยายลูกหลานต่อไป
- โหนดพ่อ (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) หรือเรียกว่าทรีย่อย
ซึ่งซับทรีเหล่านี้จะเป็นโครงสร้างที่มีการเชื่อมโยงถัดจากรูทโหนด สำหรับโหนดแรกของซับทรีก็
คือรูทโหนดของซับทรีนั้น ๆ และยังใช้เป็นชื่อเรียกของซับทรีนั้นด้วย นอกจากนี้ซับทรียังสามารถ
แบ่งส่วนย่อยออกเป็นซับทรีย่อย ๆ ได้อีก
ซึ่งซับทรีเหล่านี้จะเป็นโครงสร้างที่มีการเชื่อมโยงถัดจากรูทโหนด สำหรับโหนดแรกของซับทรีก็
คือรูทโหนดของซับทรีนั้น ๆ และยังใช้เป็นชื่อเรียกของซับทรีนั้นด้วย นอกจากนี้ซับทรียังสามารถ
แบ่งส่วนย่อยออกเป็นซับทรีย่อย ๆ ได้อีก
ไบนารีทรี (Binary Tees)
ไบนารีทรีจัดเป็นทรีชนิดหนึ่งที่มีความสำคัญมาก โดยมีคุณสมบัติสำคัญคือเป็นทรีที่
สามารถมีลุกได้ไม่เกินสองโหนด ในทุกๆ โหนดอาจมีลูกเพียงด้านซ้ายหรือด้านขวา หรืออาจมีลูกทั้ง
ซ้ายและขวา หรืออาจไม่มีลูกเลยก็ได้ หรือกล่าวอีกในหนึ่งก็คือ เป็นทรีที่แต่ละโหนดจะมีซับทรี<=2
นั่นเอง พิจารณาจากรูปที่ 6.4 ซึ่งเป็นไบนารีทรีที่ประกอบด้วย 2 ซับทรีโดยแต่ละซับทรีทั้งด้านซ้าย
และด้านขวาต่างก็มีคุณสมบัติเป็นไบนารีทรี
คุณสมบัติของไบนารีทรี (Properties)
ด้วยคูณสมบัติของไบนารีทรีจึงทำให้ไบนารีทรีมีคุณสมบัติพิเศษกว่าทรีทั่วไป ซึ่งประ
กอบด้วยคุณสมบิติที่สามารถนำไปคำนวณเพื่อหาผลลัพธ์ได้ดังต่อไปนี้
ด้วยคูณสมบัติของไบนารีทรีจึงทำให้ไบนารีทรีมีคุณสมบัติพิเศษกว่าทรีทั่วไป ซึ่งประ
กอบด้วยคุณสมบิติที่สามารถนำไปคำนวณเพื่อหาผลลัพธ์ได้ดังต่อไปนี้
- ความสูงน้อยที่สุดของทรี (Minimum Height)
หากต้องการจัดเก็บโหนดจำนวน N โหนดในไบนารีทรี ความสูงน้อยที่สุดของทรีดัง
กล่าวสามารถคำนวณได้จากสูตร
Hmin = [log2N]+
หากต้องการจัดเก็บโหนดจำนวน N โหนดในไบนารีทรี ความสูงน้อยที่สุดของทรีดัง
กล่าวสามารถคำนวณได้จากสูตร
Hmin = [log2N]+
- จำนวนโหนดน้อยที่สุด (Minimum Nodes)
เราสามารถคำนวณเพื่อการตัดสินใจว่า จำนวนโหนดน้อยที่สุดที่สามารถมีได้ใน
ไบนารีทรีมีจำนวนเท่าไรได้จากสูตร
Nmin =H
เราสามารถคำนวณเพื่อการตัดสินใจว่า จำนวนโหนดน้อยที่สุดที่สามารถมีได้ใน
ไบนารีทรีมีจำนวนเท่าไรได้จากสูตร
Nmin =H
- จำนวนโหนดมากที่สุด (Maximum Nodes)
สำหรับสูตรการคำนวณหาจำนวนโหนดมากที่สุดที่มีได้ในไบนารีทรี จะพิจารณาจาก
ความเป็นจริงด้านคุณสมบัติของไบนารีทรีคือ แต่ละโหนดสามารถมีลูกได้สูงสุดไม่เกิน 2 โหนด
ซึ่งสามารถคำนวณได้จากสูตร
Nmix =2H-1
สำหรับสูตรการคำนวณหาจำนวนโหนดมากที่สุดที่มีได้ในไบนารีทรี จะพิจารณาจาก
ความเป็นจริงด้านคุณสมบัติของไบนารีทรีคือ แต่ละโหนดสามารถมีลูกได้สูงสุดไม่เกิน 2 โหนด
ซึ่งสามารถคำนวณได้จากสูตร
Nmix =2H-1
- ความสมดุล (Balance)
ความสมดุลของไบนารีทรีจะสามารถทราบได้จากค่า Balance Factor เท่ากับ
0 ซึ่งค่าดังกล่าวคำนวณได้จากการนำความสูงของซับทรีด้านซ้าย (HL) มาหักลบกับความสูงของ
ซับทรีด้านขวา (HR) ที่เป็นไปตามสูตรดังนี้
B = Hl-HR
และจากสูตรดังกล่าว ความสมดุลของทรีจากรูปที่ 6.5 ก็คือ (a)=0,(b)=0,(c)=1,(d)=1,(e)=0,
(f)=1,(g)=-2 และ (h)=2
ความสมดุลของไบนารีทรีจะสามารถทราบได้จากค่า Balance Factor เท่ากับ
0 ซึ่งค่าดังกล่าวคำนวณได้จากการนำความสูงของซับทรีด้านซ้าย (HL) มาหักลบกับความสูงของ
ซับทรีด้านขวา (HR) ที่เป็นไปตามสูตรดังนี้
B = Hl-HR
และจากสูตรดังกล่าว ความสมดุลของทรีจากรูปที่ 6.5 ก็คือ (a)=0,(b)=0,(c)=1,(d)=1,(e)=0,
(f)=1,(g)=-2 และ (h)=2
แสดงการคำนวณความสมดุลของไบนารีทรี
ไบนารีทรีแบบสมบูรณ์และเกือบสมบูรณ์ (Complete and Nearly Complete
Binary Trees)
ไบนารีทรีแบบสมบูรณ์นั้นจะมีจำนวนโหนดสูงสุดที่สามารถมีได้ ซึ่งเป็นไปตามสูตร
Nmax โดยโหนดของซับทรีด้านซ้ายและซับทรีด้านขวาจะมีจำนวนเท่ากัน สำหรับตัวอย่างไบนารี
ทรีแบบสมบูรณ์ แสดงไว้ดังรูปที่ 6.6 (a) ในขณะที่ไบนารีทรีเกือบสมบูรณ์ก็จะเป็นไปตามสูตร
Hmin หรือเป็นทรีที่มีโหนดเต็มทุกโหนด ยกเว้นในระดับสุดท้ายที่มีโหนดเฉพาะทางด้านซ้าย
ซึ่งเป็นไปดังรูปที่ 6.6 (b)
Binary Trees)
ไบนารีทรีแบบสมบูรณ์นั้นจะมีจำนวนโหนดสูงสุดที่สามารถมีได้ ซึ่งเป็นไปตามสูตร
Nmax โดยโหนดของซับทรีด้านซ้ายและซับทรีด้านขวาจะมีจำนวนเท่ากัน สำหรับตัวอย่างไบนารี
ทรีแบบสมบูรณ์ แสดงไว้ดังรูปที่ 6.6 (a) ในขณะที่ไบนารีทรีเกือบสมบูรณ์ก็จะเป็นไปตามสูตร
Hmin หรือเป็นทรีที่มีโหนดเต็มทุกโหนด ยกเว้นในระดับสุดท้ายที่มีโหนดเฉพาะทางด้านซ้าย
ซึ่งเป็นไปดังรูปที่ 6.6 (b)
- แบบสมบูรณ์จะมี Subtree ด้านซ้ายและขวาเท่ากัน
- แบบเกือบสมบูรณ์ Subtree ทางด้านซ้ายจะไม่มี
การแทนไบนารีทรีในหน่วยความจำ (Binary Tree Representions)
เราสามารถแทนโครงสร้างไบนารีทรีในหน่วยความจำด้วยอาร์เรย์หรือลิงก์ลิสต์
ซึ่งมีรายละเอียดดังต่อไปนี้
การแทนไบนารีทรีด้วยอาร์เรย์
ในที่นี้จะกล่าวถึงการแทนโครงสร้างไบนารีทรีในหน่วยความจำด้วยอาร์เรย์หนึ่ง
มิติโดยกรณ์ที่ทรีอยุ่ในรูปแบบของไบนารีทรีแบบสมบูรณ์ ก็จะลำดับตำแหน่งข้อมูลในทรีในแต่ละ
ระดับด้วยการเรียงจากซ้ายไปขวา จากรูปที่ 6.7 เป็นตัวอย่างไบนารีทรีแบบสมบูรณ์ เมื่อนำมา
แทนโครงสร้างด้วยอาร์เรย์หนึ่งมิติ ก็จะมีการลำดับตำแหน่งข้อมูลดังนี้
เราสามารถแทนโครงสร้างไบนารีทรีในหน่วยความจำด้วยอาร์เรย์หรือลิงก์ลิสต์
ซึ่งมีรายละเอียดดังต่อไปนี้
การแทนไบนารีทรีด้วยอาร์เรย์
ในที่นี้จะกล่าวถึงการแทนโครงสร้างไบนารีทรีในหน่วยความจำด้วยอาร์เรย์หนึ่ง
มิติโดยกรณ์ที่ทรีอยุ่ในรูปแบบของไบนารีทรีแบบสมบูรณ์ ก็จะลำดับตำแหน่งข้อมูลในทรีในแต่ละ
ระดับด้วยการเรียงจากซ้ายไปขวา จากรูปที่ 6.7 เป็นตัวอย่างไบนารีทรีแบบสมบูรณ์ เมื่อนำมา
แทนโครงสร้างด้วยอาร์เรย์หนึ่งมิติ ก็จะมีการลำดับตำแหน่งข้อมูลดังนี้
ตัวอย่างไบนารีทรีแบบสมบูรณ์
แบบทดสอบ โครงสร้างข้อมูลแบบทรี
1.โครงสร้างข้อมูลแบบต้นไม้เป็นโครงสร้างชนิดใด
ก. ชนิดเชิงเส้น
ข. ชนิดไม่เชิงเส้น
ค. ชนิดตัดสินใจเลือก
ง. ชนิดทำงานซ้ำ
2. โหนดพิเศษโหนดหนึ่งที่อยู่บนสุดแรกเรียกว่าอะไร
ก. Father
ข. Subtree
ค. Leat Node
ง. Root Node
3. Level มีความหมายตรงกับข้อใด
ก. รูท
ข. ดีกรีของโหนด
ค. โหนดที่เป็นใบ
ง. ระดับของโหนด
4. ดีกรีของโหนดคืออะไร
ก. รูทโหนด
ข. จำนวนต้นไม้ 1 ต้น
ค. ต้นไม้แบบพรีออเดอร์
ง. จำนวนต้นไม้ย่อยของโหนดนั้น
5. ป่าไม้ในโครงสร้างข้อมูลแบบต้นไม้ หมายถึงสิ่งใด
ก. กลุ่มของต้นไม้
ข. ต้นไม้ย่อยซ้าย
ค. ต้นไม้ย่อยขวา
ง. การดูแลต้นไม้
6. โครงสร้างข้อมูลแบบต้นไม้ มีลักษณะคล้ายสิ่งใด
ก. ใบไม้
ข. รากของต้นไม้
ค. ลำต้นของต้นไม้
ง. กิ่งก้านของต้นไม้
7. ต้นไม้ธรรมชาติจะงอกจากล่างขึ้นบน ส่วนโครงสร้างข้อมูลแบบต้นไม้นั้นจะเจริญเติบโตอย่างไร
ก.จากล่างไปบน
ข. จากบนลงล่าง
ค. จากซ้ายไปขวา
ง. จากขวาไปซ้าย
8. ต้นไม้ Binary ที่แต่ละโหนดภายในจะมีโหนดย่อยซ้ายโหนดย่อยขวาและโหนดใบหมายถึงต้นไม้แบบใด
ก. ต้นไม้ไบนารีคู่
ข. ต้นไม้ไบนารีเดี่ยว
ค. ต้นไม้ไบนารีแบบสมบูรณ์
ง. ต้นไม้ไบนารีแบบไม่สมบูรณ์
9. ข้อใดไม่ใช่การแทนต้นไม้ไบนารีในหน่วยความจำ
ก. การแทนโดยอาศัยพอยน์เตอร์
ข การแทนโดยอาศัยแอดเดรสของโหนด
ค. การแทนแบบวีแควนเชียล
ง. การแทนแบบลำดับชั้น
10. LVR คือวิธีการเดินเข้าแบบใด
ก. แบบพรีออร์เดอร์
ข. แบบอินออร์เดอร์
ค. แบบโพสต์ออร์เดอร์
ง. ไม่มีข้อใดถูก
เฉลย 1.ข 2.ง 3.ง 4.ง 5.ก 6.ง 7.ข 8.ค 9.ง 10.ข