ZBLOG

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

在Go语言中将列表数据转换为树形结构,可以通过递归的方式来实现。下面是一个示例代码:

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. type Node struct {
  6. ID int
  7. Name string
  8. ParentID int
  9. Children []*Node
  10. }
  11. func main() {
  12. data := []Node{
  13. {1, "Root", 0, nil},
  14. {2, "Child 1", 1, nil},
  15. {3, "Child 2", 1, nil},
  16. {4, "Grandchild 1", 2, nil},
  17. }
  18. rootID := findRoot(data) // 找到根节点的ID
  19. tree := buildTree(rootID, data) // 构建树形结构
  20. printTree(tree, "") // 打印树形结构
  21. }
  22. // 查找根节点的ID(假设根节点的ParentID为0)
  23. func findRoot(data []Node) int {
  24. for _, node := range data {
  25. if node.ParentID == 0 {
  26. return node.ID
  27. }
  28. }
  29. return -1 // 没有找到根节点,返回-1表示错误或无效输入
  30. }
  31. // 构建树形结构
  32. func buildTree(parentID int, data []Node) *Node {
  33. node := &Node{}
  34. for _, item := range data {
  35. if item.ParentID == parentID {
  36. child := buildTree(item.ID, data)
  37. node.Children = append(node.Children, child)
  38. node.ID = parentID
  39. node.Name = fmt.Sprintf("Node %d", parentID)
  40. node.ParentID = item.ParentID
  41. }
  42. }
  43. return node
  44. }
  45. // 递归打印树形结构
  46. func printTree(node *Node, indent string) {
  47. fmt.Println(indent + node.Name)
  48. for _, child := range node.Children {
  49. printTree(child, indent+" ")
  50. }
  51. }

在上述示例中,我们定义了一个Node结构体表示节点,其中包含ID、名称、父节点ID和子节点列表。通过递归方式实现了将列表数据转换为树形结构的函数buildTree

首先找到根节点的ID,然后调用buildTree函数来递归构建整个树形结构。最后使用printTree函数打印出整个树形结构。

运行以上代码会输出如下结果:

”` Root Child 1

  1. Grandchild 1

Child 2 “`


内容由零声教学AI助手提供,问题来源于学员提问

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?