在Go语言二叉树的学习过程中,层序遍历(Level Order Traversal)是一个非常基础且重要的概念。它也被称为广度优先遍历(BFS),常用于解决树结构中的层级问题,比如按行打印节点、计算树的宽度等。
本教程将手把手教你如何用 Go 语言实现二叉树的层序遍历,即使你是编程新手,也能轻松理解!
层序遍历是指从树的根节点开始,逐层从左到右访问所有节点。与前序、中序、后序遍历(它们属于深度优先遍历)不同,层序遍历是“一层一层”地处理节点。
图:一个简单的二叉树及其层序遍历结果 [1, 2, 3, 4, 5]
要实现层序遍历,我们需要借助一个队列(Queue)数据结构。Go 标准库没有内置队列,但我们可以用切片(slice)模拟队列行为。
type TreeNode struct { Val int Left *TreeNode Right *TreeNode} 我们使用一个切片作为队列,初始时将根节点入队。然后循环处理队列中的节点:出队一个节点,将其值加入结果,再将其左右子节点(如果存在)依次入队。
func levelOrder(root *TreeNode) [][]int { if root == nil { return [][]int{} } var result [][]int queue := []*TreeNode{root} // 初始化队列 for len(queue) > 0 { levelSize := len(queue) var currentLevel []int // 处理当前层的所有节点 for i := 0; i < levelSize; i++ { node := queue[0] queue = queue[1:] // 出队 currentLevel = append(currentLevel, node.Val) // 将子节点入队 if node.Left != nil { queue = append(queue, node.Left) } if node.Right != nil { queue = append(queue, node.Right) } } result = append(result, currentLevel) } return result} 上面的代码返回的是一个二维切片,每一层对应一个子切片。如果你只需要一维的结果(即所有节点按顺序排列),可以稍作修改:
func levelOrderFlat(root *TreeNode) []int { if root == nil { return []int{} } var result []int queue := []*TreeNode{root} for len(queue) > 0 { node := queue[0] queue = queue[1:] result = append(result, node.Val) if node.Left != nil { queue = append(queue, node.Left) } if node.Right != nil { queue = append(queue, node.Right) } } return result} package mainimport "fmt"type TreeNode struct { Val int Left *TreeNode Right *TreeNode}func levelOrder(root *TreeNode) [][]int { if root == nil { return [][]int{} } var result [][]int queue := []*TreeNode{root} for len(queue) > 0 { levelSize := len(queue) var currentLevel []int for i := 0; i < levelSize; i++ { node := queue[0] queue = queue[1:] currentLevel = append(currentLevel, node.Val) if node.Left != nil { queue = append(queue, node.Left) } if node.Right != nil { queue = append(queue, node.Right) } } result = append(result, currentLevel) } return result}func main() { // 构建示例树: // 1 // / \ // 2 3 // / \ // 4 5 root := &TreeNode{Val: 1} root.Left = &TreeNode{Val: 2} root.Right = &TreeNode{Val: 3} root.Left.Left = &TreeNode{Val: 4} root.Left.Right = &TreeNode{Val: 5} fmt.Println("层序遍历结果(分层):", levelOrder(root)) // 输出: [[1] [2 3] [4 5]]} 通过本教程,你已经掌握了如何在 Go语言 中实现 二叉树的层序遍历。这是学习 Go数据结构 的重要一步,也是面试中常见的算法题。
记住关键点:使用队列、逐层处理、先入先出(FIFO)。多练习几次,你就能熟练运用 广度优先遍历 解决各种树相关的问题了!
希望这篇教程对你有帮助!欢迎继续探索更多 Go 语言数据结构的奥秘。
本文由主机测评网于2025-12-04发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025122636.html