在Go语言中将列表数据转换为树形结构,可以通过递归的方式来实现。下面是一个示例代码:
package main
import (
"fmt"
)
type Node struct {
ID int
Name string
ParentID int
Children []*Node
}
func main() {
data := []Node{
{1, "Root", 0, nil},
{2, "Child 1", 1, nil},
{3, "Child 2", 1, nil},
{4, "Grandchild 1", 2, nil},
}
rootID := findRoot(data) // 找到根节点的ID
tree := buildTree(rootID, data) // 构建树形结构
printTree(tree, "") // 打印树形结构
}
// 查找根节点的ID(假设根节点的ParentID为0)
func findRoot(data []Node) int {
for _, node := range data {
if node.ParentID == 0 {
return node.ID
}
}
return -1 // 没有找到根节点,返回-1表示错误或无效输入
}
// 构建树形结构
func buildTree(parentID int, data []Node) *Node {
node := &Node{}
for _, item := range data {
if item.ParentID == parentID {
child := buildTree(item.ID, data)
node.Children = append(node.Children, child)
node.ID = parentID
node.Name = fmt.Sprintf("Node %d", parentID)
node.ParentID = item.ParentID
}
}
return node
}
// 递归打印树形结构
func printTree(node *Node, indent string) {
fmt.Println(indent + node.Name)
for _, child := range node.Children {
printTree(child, indent+" ")
}
}
在上述示例中,我们定义了一个Node
结构体表示节点,其中包含ID、名称、父节点ID和子节点列表。通过递归方式实现了将列表数据转换为树形结构的函数buildTree
。
首先找到根节点的ID,然后调用buildTree
函数来递归构建整个树形结构。最后使用printTree
函数打印出整个树形结构。
运行以上代码会输出如下结果:
”` Root Child 1
Grandchild 1
Child 2
“`
内容由零声教学AI助手提供,问题来源于学员提问