ในชีวิตจริง ฉันเชื่อว่าทุกคนคุ้นเคยกับต้นไม้ ไม่ว่าจะเป็นต้นหลิว ต้นป็อปลาร์ หรือต้นพีช อาจกล่าวได้ว่าต้นไม้สามารถพบเห็นได้ทั่วไปในโลก คอมพิวเตอร์ ของแบบจำลองโครงสร้างลำดับชั้น
ดังที่แสดงด้านล่าง:
โครงสร้างแบบต้นไม้มีการใช้งานหลายอย่าง ตัวอย่างเช่น โครงสร้างองค์กรของบริษัทสามารถแสดงด้วยแบบต้นไม้ได้ ดังที่แสดงด้านล่าง:
นอกเหนือจากโครงสร้างองค์กรแล้ว สิ่งต่างๆ เช่น แผนภูมิลำดับวงศ์ตระกูล จังหวัด และเมือง ฯลฯ สามารถแสดงได้โดยใช้โครงสร้างแผนภูมิ
มีคำศัพท์สำหรับต้นไม้หลายคำ ดังแสดงด้านล่าง
n=0
เรียกว่าแผนผังว่าง ระดับADH
;อาจกล่าวได้ว่าเป็นโครงสร้างข้อมูลที่พบบ่อยที่สุดในส่วนหน้า เช่น แผนผัง DOM, การเลือกแบบเรียงซ้อน, ส่วนประกอบของต้นไม้ ฯลฯ
JavaScript ไม่มีโครงสร้างข้อมูลแบบต้นไม้ แต่เราสามารถใช้ได้ object และ Array เพื่อจำลอง tree
เช่นโค้ดต่อไปนี้:
const tree = { ค่า: 'A', เด็ก: [ - ค่า: 'B', เด็ก: [ { ค่า: 'E' ลูก: null } { ค่า: 'F' ลูก: null } - - - ค่า: 'C', เด็ก ๆ: [{ ค่า: 'G' เด็ก ๆ: null }], - - ค่า: 'D', เด็ก: [ { ค่า: 'H' ลูก: null }, { ค่า: 'ฉัน' ลูก: null } - - - }
อริธึมการแวะผ่านความลึกก่อนที่เรียกว่าคือการค้นหากิ่งก้านของต้นไม้ให้ลึกที่สุด ลำดับการแวะผ่านมีดังนี้:
แนวคิดการใช้งานมีดังนี้
children
ของโหนดรูทรหัสการใช้งานมีดังนี้:
function dfs(root) { console.log(root.value) root.children && root.children.forEach(dfs) // สอดคล้องกับสิ่งต่อไปนี้ // if (root.children) { // root.children.forEach(เด็ก => { //dfs(ลูก) - - - dfs(tree) //tree นี้เป็น tree ที่กำหนดไว้ก่อนหน้านี้/* ผลลัพธ์ A บี อี เอฟ ค ช ดี ชม ฉัน */
อย่างที่คุณเห็น ลำดับนั้นสอดคล้องกับรูปภาพ ซึ่งหมายความว่าไม่มีปัญหากับอัลกอริทึมของเรา
สิ่งที่เรียกว่าลำดับความสำคัญแบบกว้างคือการเยี่ยมชมโหนดที่อยู่ใกล้กับโหนดรูทมากที่สุดตามลำดับดังนี้:
แนวคิดการใช้งานมีดังนี้:
children
ของส่วนหัวของคิวลงในคิวตามลำดับรหัสการใช้งานมีดังนี้:
function bfs(root) { // 1. สร้างคิวใหม่และเพิ่มโหนดในคิว const q = [root] // 4 ทำซ้ำในขณะที่ (q.length > 0) { const node = q.shift() // 2 คิวเฮดถูกแยกออกจากคิว console.log(node.value) // มีการเพิ่มลูก 3 คนซึ่งเป็นหัวหน้าทีมในโหนดทีม เด็ก && node.children.forEach (เด็ก => { q.push(ลูก) - - - bfs(ต้นไม้) /* ผลลัพธ์ ก บี ค ดี อี เอฟ ช ชม ฉัน */
อย่างที่คุณเห็น ลำดับนั้นสอดคล้องกับรูปภาพ ซึ่งหมายความว่าไม่มีปัญหากับอัลกอริทึมของเรา