ZBLOG

如何用Golang将列表数据转换为树形结构,go语言实现

在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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=14046

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?