二叉树是一种树形数据结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点。遍历二叉树是一种访问所有节点的过程,主要有三种遍历方式:前序遍历、中序遍历和后序遍历。
二叉树遍历方式
- 前序遍历(Pre-order Traversal):
- 访问根节点
- 递归遍历左子树
- 递归遍历右子树
- 中序遍历(In-order Traversal):
- 递归遍历左子树
- 访问根节点
- 递归遍历右子树
- 后序遍历(Post-order Traversal):
- 递归遍历左子树
- 递归遍历右子树
- 访问根节点
Go语言实现二叉树遍历
以下是用Go语言实现二叉树及其遍历的示例代码:
package main
import "fmt"
// 定义二叉树节点结构体
type TreeNode struct {
Val any
Left *TreeNode
Right *TreeNode
}
// 前序遍历
func preOrderTraversal(root *TreeNode) {
if root == nil {
return
}
fmt.Printf("%v ", root.Val)
preOrderTraversal(root.Left)
preOrderTraversal(root.Right)
}
// 中序遍历
func inOrderTraversal(root *TreeNode) {
if root == nil {
return
}
inOrderTraversal(root.Left)
fmt.Printf("%v ", root.Val)
inOrderTraversal(root.Right)
}
// 后序遍历
func postOrderTraversal(root *TreeNode) {
if root == nil {
return
}
postOrderTraversal(root.Left)
postOrderTraversal(root.Right)
fmt.Printf("%v ", root.Val)
}
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.Print("Pre-order Traversal: ")
preOrderTraversal(root)
fmt.Println()
// 中序遍历
fmt.Print("In-order Traversal: ")
inOrderTraversal(root)
fmt.Println()
// 后序遍历
fmt.Print("Post-order Traversal: ")
postOrderTraversal(root)
fmt.Println()
}
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特