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中semaphore(信号量)源码
Apr 03 Golang
go结构体嵌套的切片数组操作
Apr 28 Golang
Golang中interface{}转为数组的操作
Apr 30 Golang
golang elasticsearch Client的使用详解
May 05 Golang
Go 自定义package包设置与导入操作
May 06 Golang
解决golang 关于全局变量的坑
May 06 Golang
关于golang高并发的实现与注意事项说明
May 08 Golang
Golang 并发下的问题定位及解决方案
Mar 16 Golang
Go 中的空白标识符下划线
Mar 25 Golang
Golang jwt身份认证
Apr 20 Golang
Golang ort 中的sortInts 方法
Apr 24 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中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
php获取YouTube视频信息的方法
2015/02/11 PHP
php四种定界符详解
2017/02/16 PHP
JS解析XML的实现代码
2009/11/12 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
2012/12/17 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
javaScript事件机制兼容【详细整理】
2016/07/23 Javascript
jquery+html仿翻页相册功能
2016/12/20 Javascript
AngularJS报错$apply already in progress的解决方法分析
2017/01/30 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
2019/03/06 Javascript
jQuery中使用validate插件校验表单功能
2019/05/24 jQuery
node中使用log4js4.x版本记录日志的方法
2019/08/20 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
[49:40]2018DOTA2亚洲邀请赛小组赛 A组加赛 TNC vs Newbee
2018/04/03 DOTA
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
2018/07/04 Python
Python常见数字运算操作实例小结
2019/03/22 Python
python如何删除文件中重复的字段
2019/07/16 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
Python PyInstaller安装和使用教程详解
2020/01/08 Python
美国厨房和园艺工具网上商店:Nestneed
2019/08/24 全球购物
工商管理应届生求职信
2013/10/07 职场文书
个人评价范文分享
2014/01/11 职场文书
咖啡店自主创业商业计划书
2014/01/22 职场文书
预防艾滋病宣传标语
2014/06/25 职场文书
安全标兵事迹材料
2014/08/17 职场文书
谢师宴学生致辞
2015/07/27 职场文书
公司保密管理制度
2015/08/04 职场文书
PHP实现考试倒计时功能代码
2021/04/16 PHP
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers