下面是gtree的基本使用示例:
package main
import (
"fmt"
"github.com/gogf/gf/container/gtree"
)
type TreeNode struct {
Id int
ParentId int
Name string
}
func main() {
// 创建一个树
tree := gtree.NewTree(func(v1, v2 interface{}) int {
node1 := v1.(*TreeNode)
node2 := v2.(*TreeNode)
return node1.Id - node2.Id
})
// 添加节点
tree.SetComparator(func(v1, v2 interface{}) int {
node1 := v1.(*TreeNode)
node2 := v2.(*TreeNode)
return node1.Id - node2.Id
})
// 添加节点
tree.Insert(&TreeNode{Id: 1, ParentId: 0, Name: "Node 1"})
tree.Insert(&TreeNode{Id: 2, ParentId: 1, Name: "Node 1-1"})
tree.Insert(&TreeNode{Id: 3, ParentId: 1, Name: "Node 1-2"})
tree.Insert(&TreeNode{Id: 4, ParentId: 0, Name: "Node 2"})
tree.Insert(&TreeNode{Id: 5, ParentId: 4, Name: "Node 2-1"})
// 获取根节点
root := tree.GetRoot()
// 遍历树
root.Walk(func(node *gtree.TreeNode) {
treeNode := node.V.(*TreeNode)
fmt.Printf("Node ID: %d, Parent ID: %d, Name: %s\n", treeNode.Id, treeNode.ParentId, treeNode.Name)
})
// 获取指定节点
node := tree.Search(func(node *gtree.TreeNode) bool {
treeNode := node.V.(*TreeNode)
return treeNode.Id == 2
})
if node != nil {
foundNode := node.V.(*TreeNode)
fmt.Printf("Found Node ID: %d, Parent ID: %d, Name: %s\n", foundNode.Id, foundNode.ParentId, foundNode.Name)
} else {
fmt.Println("Node not found.")
}
}
在这个例子中,我们首先创建了一个gtree.Tree,并添加了一些节点。然后,我们使用Walk方法遍历了整个树,打印了每个节点的信息。最后,我们使用Search方法查找了树中的一个节点,并打印了其信息。
请注意,你需要在你的项目中引入github.com/gogf/gf和github.com/gogf/gf/container/gtree这两个包。如果还没有安装,你可以使用以下命令安装:
go get -u github.com/gogf/gf
转载请注明出处:http://www.zyzy.cn/article/detail/7720/GoFrame