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
648 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!

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