首页 >后端开发 >php教程 >如何高效地将父子关系转化为嵌套层次树?

如何高效地将父子关系转化为嵌套层次树?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-21 04:24:13572浏览

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

将父子关系转换为层次树

问题:

给定一组表示层次结构的名称-父名称对关系,任务是将它们转换为最少数量的嵌套树结构。例如,使用以下输入:

Child : Parent
    H : G
    F : G
    G : D
    E : D
    A : E
    B : C
    C : E
    D : NULL

预期输出是一系列分层树:

D
├── E
│   ├── A
│   │   └── B
│   └── C   
└── G
    ├── F
    └── H

目标是生成嵌套的

    。每个
  • 的元素包含孩子的名字。

    解决方案:

    为了有效地将输入转换为分层树结构,采用了递归方法。定义了以下函数:

    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>';
        }
    }

    用法:

    $result = parseTree($tree);
    printTree($result);

    此方法首先解析输入,以数组格式创建分层树结构。随后,它遍历树,生成所需的嵌套

      组合函数:

      为了更有效地实现,可以创建两个函数的组合版本:

    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>';
        }
    }

以上是如何高效地将父子关系转化为嵌套层次树?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn