Dalam kehidupan nyata, saya yakin semua orang pasti mengenal pohon. Baik itu pohon willow, pohon poplar, atau pohon persik, dapat dikatakan bahwa pohon dapat dilihat di mana saja dalam kehidupan kita, pohon adalah sebuah abstraksi dari struktur hierarki ,
seperti yang ditunjukkan di bawah ini:
Ada banyak penerapan struktur pohon. Misalnya, struktur organisasi suatu perusahaan dapat direpresentasikan dengan pohon, seperti yang ditunjukkan di bawah ini:
Selain struktur organisasi, hal-hal seperti silsilah keluarga, provinsi dan kota, dll. dapat direpresentasikan menggunakan struktur pohon.
Ada banyak istilah untuk pohon, seperti yang ditunjukkan di bawah ini:
n=0
, maka disebut pohon kosong;ADH
;dapat dikatakan sebagai salah satu struktur data yang paling umum di front-end, seperti pohon DOM, pemilihan berjenjang, komponen pohon, dll.
JavaScript tidak menyediakan struktur data pohon, namun dapat kita gunakan objek dan Array untuk mensimulasikan pohon,
seperti kode berikut:
const tree = { nilai: 'A', anak-anak: [ { nilai: 'B', anak-anak: [ { nilai: 'E', anak: null }, { nilai: 'F', anak: null }, ], }, { nilai: 'C', anak: [{ nilai: 'G', anak: null }], }, { nilai: 'D', anak-anak: [ { nilai: 'H', anak: null }, { nilai: 'Saya', anak: null }, ], }, ], }
Yang disebut algoritma penjelajahan kedalaman-pertama adalah mencari cabang-cabang pohon sedalam mungkin. Urutan traversalnya adalah sebagai berikut:
Ide implementasinya adalah sebagai berikut:
children
dari node root;kode implementasinya adalah sebagai berikut:
function dfs(root) { konsol.log(root.nilai) root.children && root.children.forEach(dfs) // Konsisten dengan yang berikut // if (root.children) { // root.children.forEach(anak => { //dfs(anak) // }) // } } dfs(pohon) //Pohon ini adalah pohon yang didefinisikan sebelumnya/* Hasil A B E F C G D H SAYA */
Seperti yang Anda lihat, urutannya sesuai dengan gambar, artinya tidak ada masalah dengan algoritma kami.
Yang disebut prioritas luas adalah mengunjungi node yang paling dekat dengan node akar secara berurutan. Urutan traversalnya adalah sebagai berikut:
Ide implementasinya adalah sebagai berikut:
children
dari kepala antrian ke antrian secara berurutan;Kode implementasinya adalah sebagai berikut:
function bfs(root) { // 1. Buat antrian baru dan tambahkan node ke antrian const q = [root] // 4 Ulangi sambil (q.length > 0) { const node = q.shift() // 2 kepala antrian di-dequeued console.log(node.value) // 3 anak, ketua tim, ditambahkan ke node tim.children && node.children.forEach(anak => { q.push(anak) }) } } bfs(pohon) /* Hasil A B C D E F G H SAYA */
Seperti yang Anda lihat, urutannya sesuai dengan gambar, artinya tidak ada masalah dengan algoritma kami.