Golang 遍历二叉树


Posted in Golang onApril 19, 2022

1. 二叉树的定义

二叉树需满足的条件

① 本身是有序树

② 树中包含的各个节点的长度不能超过2,即只能是0、1或者2

Golang 遍历二叉树

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}

到此这篇关于详解Go语言如何实现二叉树遍历的文章就介绍到这了!

Golang 相关文章推荐
go原生库的中bytes.Buffer用法
Apr 25 Golang
golang如何去除多余空白字符(含制表符)
Apr 25 Golang
golang http使用踩过的坑与填坑指南
Apr 27 Golang
golang 实现对Map进行键值自定义排序
Apr 28 Golang
GoLang中生成UUID唯一标识的实现
May 08 Golang
Go timer如何调度
Jun 09 Golang
Go 语言下基于Redis分布式锁的实现方式
Jun 28 Golang
go goroutine 怎样进行错误处理
Jul 16 Golang
Go语言应该什么情况使用指针
Jul 25 Golang
手把手教你导入Go语言第三方库
Aug 04 Golang
Golang 遍历二叉树
Apr 19 Golang
Golang 并发编程 SingleFlight模式
Apr 26 Golang
Golang MatrixOne使用介绍和汇编语法
Apr 19 #Golang
Golang 字符串的常见操作
Golang 链表的学习和使用
Golang Elasticsearches 批量修改查询及发送MQ
Apr 19 #Golang
GO语言异常处理分析 err接口及defer延迟
Apr 14 #Golang
GO语言字符串处理函数之处理Strings包
Apr 14 #Golang
golang的文件创建及读写操作
Apr 14 #Golang
You might like
微信扫描二维码登录网站代码示例
2013/12/30 PHP
使用Apache的rewrite
2021/03/09 Servers
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
JavaScript编程开发中的五个实用小技巧
2010/07/22 Javascript
对xmlHttp对象的理解
2011/01/17 Javascript
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
js常用代码段收集
2011/10/28 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
jQuery制作简洁的多级联动Select下拉框
2014/12/23 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
JavaScript禁止用户多次提交的两种方法
2016/07/24 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
js中获取键盘事件的简单实现方法
2016/10/10 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
vue实现样式之间的切换及vue动态样式的实现方法
2017/12/19 Javascript
基于Vue的延迟加载插件vue-view-lazy
2018/05/21 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
2020/02/10 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
python生成日历实例解析
2014/08/21 Python
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
详解Python进程间通信之命名管道
2017/08/28 Python
Python实现识别图片内容的方法分析
2018/07/11 Python
Python wxPython库使用wx.ListBox创建列表框示例
2018/09/03 Python
Python实现的批量修改文件后缀名操作示例
2018/12/07 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
Python生成随机验证码代码实例解析
2020/06/09 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
英语专业毕业生自我鉴定
2013/11/09 职场文书
招标授权委托书样本
2014/09/23 职场文书
80后婚前协议书范本
2014/10/24 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP