Rumah > pembangunan bahagian belakang > tutorial php > Bagaimana untuk Mengubah Perhubungan Ibu Bapa-Anak dengan Cekap kepada Pokok Hierarki Bersarang?

Bagaimana untuk Mengubah Perhubungan Ibu Bapa-Anak dengan Cekap kepada Pokok Hierarki Bersarang?

Mary-Kate Olsen
Lepaskan: 2024-12-21 04:24:13
asal
572 orang telah melayarinya

How to Efficiently Convert Parent-Child Relationships into Nested Hierarchical Trees?

Menukar Perhubungan Ibu Bapa-Anak kepada Pokok Hierarki

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
Salin selepas log masuk

Keluaran yang dijangkakan ialah satu siri pokok hierarki:

D
├── E
│   ├── A
│   │   └── B
│   └── C   
└── G
    ├── F
    └── H
Salin selepas log masuk

Matlamatnya adalah untuk menjana

    elemen dengan setiap
  • mengandungi nama kanak-kanak.

    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>';
        }
    }
    Salin selepas log masuk

    Penggunaan:

    $result = parseTree($tree);
    printTree($result);
    Salin selepas log masuk

    Pendekatan ini terlebih dahulu menghuraikan input, mencipta struktur pepohon hierarki dalam format tatasusunan. Selepas itu, ia melintasi pokok itu, menghasilkan

      bersarang yang diingini; elemen.

      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>';
          }
      }
      Salin selepas log masuk

      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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan