并发遍历树结构(golang)

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,开发语言,后端)