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语言切片前或中间插入项与内置copy()函数详解
Apr 27 Golang
对Golang中的FORM相关字段理解
May 02 Golang
Golang: 内建容器的用法
May 05 Golang
Golang 实现获取当前函数名称和文件行号等操作
May 08 Golang
go xorm框架的使用
May 22 Golang
go web 预防跨站脚本的实现方式
Jun 11 Golang
K8s部署发布Golang应用程序的实现方法
Jul 16 Golang
Go Plugins插件的实现方式
Aug 07 Golang
Go语言并发编程 sync.Once
Oct 16 Golang
一文搞懂Golang 时间和日期相关函数
Dec 06 Golang
golang实现浏览器导出excel文件功能
Mar 25 Golang
golang三种设计模式之简单工厂、方法工厂和抽象工厂
Apr 10 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
一篇入门的php Class 文章
2007/04/04 PHP
PHP与SQL注入攻击[一]
2007/04/17 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
php gzip压缩输出的实现方法
2013/04/27 PHP
PHP删除目录及目录下所有文件的方法详解
2013/06/06 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
2013/01/27 Javascript
js截取小数点后几位的写法
2013/11/14 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
JS+CSS实现自适应选项卡宽度的圆角滑动门效果
2015/09/15 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
python如何将图片转换为字符图片
2020/08/19 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
详解向scrapy中的spider传递参数的几种方法(2种)
2020/09/28 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
酒吧员工的岗位职责
2013/11/26 职场文书
《桃林那间小木屋》教学反思
2014/05/01 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
班级心理活动总结
2014/07/04 职场文书
文案策划专业自荐信
2014/07/07 职场文书
改进作风怎么办发言材料
2014/08/17 职场文书
债务纠纷委托书范本
2014/10/14 职场文书
交通事故代理词范文
2015/05/23 职场文书
老乡会致辞
2015/07/28 职场文书
Python天气语音播报小助手
2021/09/25 Python
详解Python中*args和**kwargs的使用
2022/04/07 Python