golang 无限极(指针注意点)
package main
import "fmt"
/*
{Id: 1, Name: "电子产品", ParentId: 0},
{Id: 2, Name: "手机", ParentId: 1},
{Id: 3, Name: "笔记本电脑", ParentId: 1},
{Id: 4, Name: "家电", ParentId: 0},
{Id: 5, Name: "电视", ParentId: 4},
{Id: 6, Name: "手机配件", ParentId: 2},
无限极分类,通过递归归并(层级关系的方式显示)
一、定义结构体存放这些字段
二、定义切片进行存放
三、定义打印方法进行层级打印
规则就是使用 Category.ParentId = ParentId(Id)
*/
type Category struct{
Id int
Name string
ParentId int
Children []Category
}
//遍历分类,一直查找只要能找到parentid就遍历
func buildCatrgoryTree(cate []Category, parentId int) []Category{
var tree []Category
for _, val := range cate{
if val.ParentId == parentId{
val.Children = buildCatrgoryTree(cate, val.Id)
tree = append(tree, val)
}
}
return tree
}
//打印,按层级打印
func printTree(category *Category, level int){
var strpad string = ""
for i := 0; i < level; i++{
strpad += "*"
}
fmt.Println(strpad, category.Name)
for _,child := range category.Children{
printTree(child, level + 1)
}
}
func main(){
tree := []*Category{
{Id: 1, Name: "电子产品", ParentId: 0},
{Id: 2, Name: "手机", ParentId: 1},
{Id: 3, Name: "笔记本电脑", ParentId: 1},
{Id: 4, Name: "家电", ParentId: 0},
{Id: 5, Name: "电视", ParentId: 4},
{Id: 6, Name: "手机配件", ParentId: 2},
}
cate := buildCatrgoryTree(tree, 0)
for _, v := range cate{
printTree(v, 0)
}
}




浙公网安备 33010602011771号