Go语言 二叉树遍历

简介: 1. 二叉树的定义2. 前序遍历3. 中序遍历4. 后序遍历

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}
相关文章
|
17天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
27 7
|
17天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
17天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
92 71
|
16天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
100 67
|
17天前
|
存储 Go
go语言中映射
go语言中映射
32 11
|
18天前
|
Go 索引
go语言修改元素
go语言修改元素
25 6
|
9天前
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数
|
Go
golang遍历返回全部目录不返回具体的文件名
使用参考: d := dir.NewDir("/") dirs, err := d.LoopLevelDir(0) // 实现遍历目录的功能// 也可以指定层级遍历,遍历几层目录package dir import ( "fmt" "io/ioutil" "strings" "time" ) t...
923 0
|
19天前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
90 62
|
21天前
|
并行计算 安全 Go
Go语言中的并发编程:掌握goroutines和channels####
本文深入探讨了Go语言中并发编程的核心概念——goroutine和channel。不同于传统的线程模型,Go通过轻量级的goroutine和通信机制channel,实现了高效的并发处理。我们将从基础概念开始,逐步深入到实际应用案例,揭示如何在Go语言中优雅地实现并发控制和数据同步。 ####