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)
}

}



posted @ 2024-07-04 18:00  北京小小鸟  阅读(7)  评论(0)    收藏  举报