package main
import (
"fmt"
"sync"
)
// 定义树节点结构
type Node struct {
Value int
Left, Right *Node
}
// 并发遍历树结构的函数
func ConcurrentTraverse(node *Node, wg *sync.WaitGroup) {
if node == nil {
wg.Done()
return
}
// 遍历左子树
wg.Add(1)
go ConcurrentTraverse(node.Left, wg)
// 遍历右子树
wg.Add(1)
go ConcurrentTraverse(node.Right, wg)
// 处理当前节点
fmt.Println(node.Value)
wg.Done()
}
func main() {
// 构造一个树结构
root := &Node{
Value: 1,
Left: &Node{
Value: 2,
Left: &Node{
Value: 4,
},
Right: &Node{
Value: 5,
},
},
Right: &Node{
Value: 3,
Left: &Node{
Value: 6,
},
Right: &Node{
Value: 7,
},
},
}
var wg sync.WaitGroup
// 启动并发遍历
wg.Add(1)
go ConcurrentTraverse(root, &wg)
// 等待所有goroutine完成
wg.Wait()
}
并发遍历树结构(golang)
最新推荐文章于 2024-07-10 19:48:24 发布