Maison > développement back-end > tutoriel php > Comment convertir efficacement les relations parent-enfant en arbres hiérarchiques imbriqués ?

Comment convertir efficacement les relations parent-enfant en arbres hiérarchiques imbriqués ?

Mary-Kate Olsen
Libérer: 2024-12-21 04:24:13
original
648 Les gens l'ont consulté

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

Conversion des relations parent-enfant en arbres hiérarchiques

Problème :

Étant donné un ensemble de paires nom-nom-parent représentant des relations, la tâche est de les transformer en un nombre minimal de structures arborescentes imbriquées. Par exemple, avec l'entrée suivante :

Child : Parent
    H : G
    F : G
    G : D
    E : D
    A : E
    B : C
    C : E
    D : NULL
Copier après la connexion

Le résultat attendu est une série d'arbres hiérarchiques :

D
├── E
│   ├── A
│   │   └── B
│   └── C   
└── G
    ├── F
    └── H
Copier après la connexion

Le but est de générer des arbres

    éléments avec chaque
  • contenant le nom de l'enfant.

    Solution :

    Pour convertir efficacement l'entrée en une structure arborescente hiérarchique, une approche récursive est utilisée. Les fonctions suivantes sont définies :

    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>';
        }
    }
    Copier après la connexion

    Utilisation :

    $result = parseTree($tree);
    printTree($result);
    Copier après la connexion

    Cette approche analyse d'abord l'entrée, créant une structure arborescente hiérarchique au format tableau. Par la suite, il parcourt l'arborescence, générant l'élément

      éléments.

      Fonction combinée :

      Pour une mise en œuvre plus efficace, une version combinée des deux fonctions peut être créée :

      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>';
          }
      }
      Copier après la connexion

      Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal