从路径字符串创建树状结构
将字符串路径数组转换为树状结构可能具有挑战性,尤其是在处理具有递归数据。这是解决该问题的有效方法:
给定的路径数组由表示树中节点路径的字符串组成。所需的输出是具有节点及其子节点的分层树结构。
首先,让我们检查提供的代码:
<code class="go">func appendChild(root Node, children []string) Node { if len(children) == 1 { return Node{children[0], nil} } else { t := root t.Name=children[0] t.Children = append(t.Children, appendChild(root, children[1:])) return t } }</code>
此代码尝试递归创建树,nhưng 它有一些问题:
为了解决这些问题,这里有一个修改后的代码示例:
<code class="go">func AddToTree(root []Node, names []string) []Node { if len(names) > 0 { var i int for i = 0; i < len(root); i++ { if root[i].Name == names[0] { //already in tree break } } if i == len(root) { root = append(root, Node{Name: names[0]}) } root[i].Children = AddToTree(root[i].Children, names[1:]) } return root }</code>
此代码对节点列表进行操作,而不是单个节点的子节点。它在插入节点之前检查节点是否已存在,并创建新节点而不是重用输入节点。此外,它还可以根据需要通过附加到根节点列表来处理给定路径不从同一根节点开始的情况。
示例输出:
[{ "name": "a", "children": [{ "name": "b", "children": [{ "name": "c" }, { "name": "g" }] }, { "name": "d" }] }]
这改进了解决方案提供了从路径字符串到分层树结构的高效且准确的转换。
以上是如何有效地将路径字符串列表转换为树状结构?的详细内容。更多信息请关注PHP中文网其他相关文章!