递归无限极分类
package main
import (
"encoding/json"
"io/ioutil"
"log"
)
type list struct {
ID int
Name string
TopObj *list
Pid int
Child []list
}
func handel(tree *list, v list){
if v.Pid == 0 {
v.TopObj = &list{
Name : tree.Name,
}
tree.Child = append(tree.Child, v)
}else{
if len(tree.Child) > 0 {
for key, value := range tree.Child {
if value.ID == v.Pid {
v.TopObj = &list{
Name: value.Name,
}
tree.Child[key].Child = append(tree.Child[key].Child, v)
}else{
handel(&tree.Child[key], v)
}
}
}
}
}
func main() {
a := []list{
{
ID:1,
Name:"A",
Pid:0,
},
{
ID:10,
Name:"Q",
Pid:0,
},
{
ID:2,
Name:"b",
Pid:1,
},
{
ID:3,
Name:"c",
Pid:0,
},
{
ID:4,
Name:"d",
Pid:3,
},
{
ID:11,
Name:"aa",
Pid:0,
},
{
ID:5,
Name:"E",
Pid:4,
},
{
ID:12,
Name:"BB",
Pid:11,
},
{
ID:13,
Name:"CC",
Pid:12,
},
{
ID:14,
Name:"DD",
Pid:13,
},
}
root := &list{
ID: 0,
Name: "/",
}
for _,v := range a {
handel(root, v)
}
jsonStr, err :=json.MarshalIndent(root," ","\t")
if err != nil {
log.Fatalln(err)
}
if err := ioutil.WriteFile("./tree.json", jsonStr, 0644); err != nil {
log.Fatalln(err)
}
}
生成树状图
tree.json
{
"ID": 0,
"Name": "/",
"TopObj": null,
"Pid": 0,
"Child": [
{
"ID": 1,
"Name": "A",
"TopObj": {
"ID": 0,
"Name": "/",
"TopObj": null,
"Pid": 0,
"Child": null
},
"Pid": 0,
"Child": [
{
"ID": 2,
"Name": "b",
"TopObj": {
"ID": 0,
"Name": "A",
"TopObj": null,
"Pid": 0,
"Child": null
},
"Pid": 1,
"Child": null
}
]
},
{
"ID": 10,
"Name": "Q",
"TopObj": {
"ID": 0,
"Name": "/",
"TopObj": null,
"Pid": 0,
"Child": null
},
"Pid": 0,
"Child": null
},
{
"ID": 3,
"Name": "c",
"TopObj": {
"ID": 0,
"Name": "/",
"TopObj": null,
"Pid": 0,
"Child": null
},
"Pid": 0,
"Child": [
{
"ID": 4,
"Name": "d",
"TopObj": {
"ID": 0,
"Name": "c",
"TopObj": null,
"Pid": 0,
"Child": null
},
"Pid": 3,
"Child": [
{
"ID": 5,
"Name": "E",
"TopObj": {
"ID": 0,
"Name": "d",
"TopObj": null,
"Pid": 0,
"Child": null
},
"Pid": 4,
"Child": null
}
]
}
]
},
{
"ID": 11,
"Name": "aa",
"TopObj": {
"ID": 0,
"Name": "/",
"TopObj": null,
"Pid": 0,
"Child": null
},
"Pid": 0,
"Child": [
{
"ID": 12,
"Name": "BB",
"TopObj": {
"ID": 0,
"Name": "aa",
"TopObj": null,
"Pid": 0,
"Child": null
},
"Pid": 11,
"Child": [
{
"ID": 13,
"Name": "CC",
"TopObj": {
"ID": 0,
"Name": "BB",
"TopObj": null,
"Pid": 0,
"Child": null
},
"Pid": 12,
"Child": [
{
"ID": 14,
"Name": "DD",
"TopObj": {
"ID": 0,
"Name": "CC",
"TopObj": null,
"Pid": 0,
"Child": null
},
"Pid": 13,
"Child": null
}
]
}
]
}
]
}
]
}