Go语言 二叉树遍历
@
1. 二叉树的定义
- 二叉树需满足的条件
① 本身是有序树
② 树中包含的各个节点的长度不能超过2,即只能是0、1或者2
2. 前序遍历
前序遍历二叉树的顺序:根——》左——》右
package main
import "fmt"
//定义结构体
type Student struct {
Name string
Age int
Score float32
left *Student //左子树指针
right *Student //右子树指针
}
//二叉树定义
func main() {
//根节点
var root Student
root.Name = "root"
root.Age = 18
root.Score = 88
//一级左子树
var left1 Student
left1.Name = "left1"
left1.Age = 20
left1.Score = 80
root.left = &left1
//一级右子树
var right1 Student
right1.Name = "right1"
right1.Age = 22
right1.Score = 100
root.right = &right1
//二级左子树
var left2 Student
left2.Name = "left2"
left2.Age = 25
left2.Score = 90
left1.left = &left2
//调用遍历函数
Req(&root)
}
//递归算法遍历整个二叉树
func Req(tmp *Student) {
for tmp == nil {
return
}
fmt.Println(tmp)
//遍历左子树
Req(tmp.left)
//遍历右子树
Req(tmp.right)
}
//输出结果如下
&{root 18 88 0xc0000c0480 0xc0000c04b0}
&{left1 20 80 0xc0000c04e0 <nil>}
&{left2 25 90 <nil> <nil>}
&{right1 22 100 <nil> <nil>}
3. 中序遍历
中序遍历:左——》根——》右
package main
import "fmt"
//定义结构体
type Student struct {
Name string
Age int
Score float32
left *Student //左子树指针
right *Student //右子树指针
}
//二叉树定义
func main() {
//根节点
var root Student
root.Name = "root"
root.Age = 18
root.Score = 88
//一级左子树
var left1 Student
left1.Name = "left1"
left1.Age = 20
left1.Score = 80
root.left = &left1
//一级右子树
var right1 Student
right1.Name = "right1"
right1.Age = 22
right1.Score = 100
root.right = &right1
//二级左子树
var left2 Student
left2.Name = "left2"
left2.Age = 25
left2.Score = 90
left1.left = &left2
//调用遍历函数
Req(&root)
}
//递归算法遍历整个二叉树
func Req(tmp *Student) {
for tmp == nil {
return
}
//遍历左子树
Req(tmp.left)
//输出root节点
fmt.Println(tmp)
//遍历右子树
Req(tmp.right)
}
//输出结果如下
&{left2 25 90 <nil> <nil>}
&{left1 20 80 0xc000114510 <nil>}
&{root 18 88 0xc0001144b0 0xc0001144e0}
&{right1 22 100 <nil> <nil>}
4. 后序遍历
后序遍历:左——》右——》根
package main
import "fmt"
//定义结构体
type Student struct {
Name string
Age int
Score float32
left *Student //左子树指针
right *Student //右子树指针
}
//二叉树定义
func main() {
//根节点
var root Student
root.Name = "root"
root.Age = 18
root.Score = 88
//一级左子树
var left1 Student
left1.Name = "left1"
left1.Age = 20
left1.Score = 80
root.left = &left1
//一级右子树
var right1 Student
right1.Name = "right1"
right1.Age = 22
right1.Score = 100
root.right = &right1
//二级左子树
var left2 Student
left2.Name = "left2"
left2.Age = 25
left2.Score = 90
left1.left = &left2
//调用遍历函数
Req(&root)
}
//递归算法遍历整个二叉树
func Req(tmp *Student) {
for tmp == nil {
return
}
//遍历左子树
Req(tmp.left)
//遍历右子树
Req(tmp.right)
//输出root节点
fmt.Println(tmp)
}
//输出结果如下
&{left2 25 90 <nil> <nil>}
&{left1 20 80 0xc0000c04e0 <nil>}
&{right1 22 100 <nil> <nil>}
&{root 18 88 0xc0000c0480 0xc0000c04b0}
自古英雄多磨难
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)