Masalah:
Diberikan satu set pasangan nama-nama ibu bapa yang mewakili hierarki perhubungan, tugasnya adalah untuk mengubahnya menjadi bilangan minimum struktur pokok bersarang. Sebagai contoh, dengan input berikut:
Child : Parent H : G F : G G : D E : D A : E B : C C : E D : NULL
Keluaran yang dijangkakan ialah satu siri pokok hierarki:
D ├── E │ ├── A │ │ └── B │ └── C └── G ├── F └── H
Matlamatnya adalah untuk menjana
Penyelesaian:
Untuk menukar input secara berkesan kepada struktur pokok hierarki, pendekatan rekursif digunakan. Fungsi berikut ditakrifkan:
function parseTree($tree, $root = null): array { $return = []; foreach ($tree as $child => $parent) { if ($parent == $root) { unset($tree[$child]); $return[] = [ 'name' => $child, 'children' => parseTree($tree, $child), ]; } } return empty($return) ? null : $return; } function printTree($tree) { if (!is_null($tree) && count($tree) > 0) { echo '<ul>'; foreach ($tree as $node) { echo '<li>'.$node['name']; printTree($node['children']); echo '</li>'; } echo '</ul>'; } }
Penggunaan:
$result = parseTree($tree); printTree($result);
Pendekatan ini terlebih dahulu menghuraikan input, mencipta struktur pepohon hierarki dalam format tatasusunan. Selepas itu, ia melintasi pokok itu, menghasilkan
Fungsi Gabungan:
Untuk pelaksanaan yang lebih cekap, versi gabungan kedua-dua fungsi boleh dibuat:
function parseAndPrintTree($root, $tree) { if (!is_null($tree) && count($tree) > 0) { echo '<ul>'; foreach ($tree as $child => $parent) { if ($parent == $root) { unset($tree[$child]); echo '<li>'.$child; parseAndPrintTree($child, $tree); echo '</li>'; } } echo '</ul>'; } }
Atas ialah kandungan terperinci Bagaimana untuk Mengubah Perhubungan Ibu Bapa-Anak dengan Cekap kepada Pokok Hierarki Bersarang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!