上一篇
在学习Go语言二叉树的过程中,掌握遍历方法是理解树形结构的关键一步。今天我们将深入浅出地讲解中序遍历(In-order Traversal)的原理与实现,即使你是编程小白,也能轻松上手!
中序遍历是一种深度优先遍历(DFS)策略,其访问顺序为:左子树 → 根节点 → 右子树。对于二叉搜索树(BST),中序遍历的结果会是一个升序排列的序列,这在实际开发中非常有用。
首先,我们需要定义一个二叉树节点的结构体。在 Go 中,这非常简单:
type TreeNode struct { Val int Left *TreeNode Right *TreeNode} 每个节点包含一个整数值 Val,以及指向左右子节点的指针 Left 和 Right。
最直观的方式是使用递归。思路如下:
func inorderTraversal(root *TreeNode) []int { var result []int var inorder func(*TreeNode) inorder = func(node *TreeNode) { if node == nil { return } inorder(node.Left) // 遍历左子树 result = append(result, node.Val) // 访问根节点 inorder(node.Right) // 遍历右子树 } inorder(root) return result} 虽然递归简洁,但在处理极深的树时可能引发栈溢出。因此,我们也可以用显式栈来实现非递归版本:
func inorderTraversalIterative(root *TreeNode) []int { var result []int stack := []*TreeNode{} current := root for current != nil || len(stack) > 0 { // 一直向左走到底,并将路径上的节点入栈 for current != nil { stack = append(stack, current) current = current.Left } // 弹出栈顶节点 current = stack[len(stack)-1] stack = stack[:len(stack)-1] result = append(result, current.Val) // 转向右子树 current = current.Right } return result} 下面是一个完整的可运行示例,包含构建树和调用遍历函数:
package mainimport "fmt"type TreeNode struct { Val int Left *TreeNode Right *TreeNode}func inorderTraversal(root *TreeNode) []int { var result []int var inorder func(*TreeNode) inorder = func(node *TreeNode) { if node == nil { return } inorder(node.Left) result = append(result, node.Val) inorder(node.Right) } inorder(root) return result}func main() { // 构建如下二叉树: // 1 // \ // 2 // / // 3 root := &TreeNode{Val: 1} root.Right = &TreeNode{Val: 2} root.Right.Left = &TreeNode{Val: 3} fmt.Println(inorderTraversal(root)) // 输出: [1 3 2]} 通过本教程,你已经掌握了在Go语言入门阶段如何实现二叉树的中序遍历。无论是递归还是迭代方式,理解其核心思想——“左→根→右”——是关键。这种遍历方式在数据结构教程中属于基础但极其重要的内容,广泛应用于表达式求值、BST验证等场景。
建议你动手敲一遍代码,尝试修改树的结构,观察输出结果的变化。实践是掌握Go语言二叉树的最佳途径!
本文由主机测评网于2025-12-26发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251212841.html