Heim > Backend-Entwicklung > PHP-Tutorial > Wie lassen sich Eltern-Kind-Beziehungen effizient in verschachtelte hierarchische Bäume umwandeln?

Wie lassen sich Eltern-Kind-Beziehungen effizient in verschachtelte hierarchische Bäume umwandeln?

Mary-Kate Olsen
Freigeben: 2024-12-21 04:24:13
Original
571 Leute haben es durchsucht

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

Eltern-Kind-Beziehungen in hierarchische Bäume umwandeln

Problem:

Gegeben sei eine Reihe von Name-Eltern-Name-Paaren, die hierarchische Strukturen darstellen Die Aufgabe besteht darin, diese Beziehungen in eine minimale Anzahl verschachtelter Baumstrukturen umzuwandeln. Zum Beispiel mit der folgenden Eingabe:

Child : Parent
    H : G
    F : G
    G : D
    E : D
    A : E
    B : C
    C : E
    D : NULL
Nach dem Login kopieren

Die erwartete Ausgabe ist eine Reihe hierarchischer Bäume:

D
├── E
│   ├── A
│   │   └── B
│   └── C   
└── G
    ├── F
    └── H
Nach dem Login kopieren

Das Ziel besteht darin, verschachtelte

    Elemente mit jedem
  • enthält den Namen des Kindes.

    Lösung:

    Um die Eingabe effektiv in eine hierarchische Baumstruktur umzuwandeln, wird ein rekursiver Ansatz verwendet. Die folgenden Funktionen sind definiert:

    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>';
        }
    }
    Nach dem Login kopieren

    Verwendung:

    $result = parseTree($tree);
    printTree($result);
    Nach dem Login kopieren

    Dieser Ansatz analysiert zunächst die Eingabe und erstellt eine hierarchische Baumstruktur in einem Array-Format. Anschließend durchläuft es den Baum und generiert das gewünschte verschachtelte

      Elemente.

      Kombinierte Funktion:

      Für eine effizientere Implementierung kann eine kombinierte Version der beiden Funktionen erstellt werden:

      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>';
          }
      }
      Nach dem Login kopieren

      Das obige ist der detaillierte Inhalt vonWie lassen sich Eltern-Kind-Beziehungen effizient in verschachtelte hierarchische Bäume umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage