在Golang中,可以使用队列来进行蛇形遍历二叉树。首先,定义一个二叉树节点的结构体:
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
然后,实现蛇形遍历函数:
func snakeTraversal(root *TreeNode) []int {
if root == nil {
return nil
}
var result []int // 存储结果的切片
queue := []*TreeNode{} // 辅助队列
queue = append(queue, root) // 根节点入队列
forward := true // 标志位,用于控制每层节点遍历方向
for len(queue) > 0 {
levelSize := len(queue) // 当前层的节点数量
var levelNodes []int // 当前层的节点值
for i := 0; i < levelSize; i++ {
node := queue[0] // 队首节点出队列
if forward { // 节点值添加顺序根据标志位决定(正序或逆序)
levelNodes = append(levelNodes, node.Val)
} else {
levelNodes = append([]int{node.Val}, levelNodes...)
}
queue = queue[1:] // 出队列
if node.Left != nil { // 左子节点入队列
queue = append(queue, node.Left)
}
if node.Right != nil { // 右子节点入队列
queue = append(queue, node.Right)
}
}
result = append(result, levelNodes...) // 将当前层节点值添加到结果切片中
forward = !forward // 反转标志位,改变下一层遍历方向
}
return result
}
使用示例:
func main() {
/*
1
/ \
2 3
/ \ / \
4 5 6 7
*/
root := &TreeNode{
Val: 1,
Left: &TreeNode{Val: 2, Left: &TreeNode{Val: 4}, Right: &TreeNode{Val: 5}},
Right: &TreeNode{Val: 3, Left: &TreeNode{Val: 6}, Right: &TreeNode{Val: 7}},
}
result := snakeTraversal(root)
fmt.Println(result) // 输出:[1 3 2 4 5]
}
以上代码实现了蛇形遍历二叉树,并将节点的值按照蛇形顺序存储在一个切片中。
内容由零声教学AI助手提供,问题来源于学员提问