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语言操作数据库及其常规操作的示例代码
Apr 21 Golang
Golang 如何实现函数的任意类型传参
Apr 29 Golang
对Golang中的FORM相关字段理解
May 02 Golang
go语言中GOPATH GOROOT的作用和设置方式
May 05 Golang
Go timer如何调度
Jun 09 Golang
Go遍历struct,map,slice的实现
Jun 13 Golang
golang 实用库gotable的具体使用
Jul 01 Golang
golang操作redis的客户端包有多个比如redigo、go-redis
Apr 14 Golang
Golang 字符串的常见操作
Apr 19 Golang
Golang获取List列表元素的四种方式
Apr 20 Golang
Golang 并发编程 SingleFlight模式
Apr 26 Golang
在ubuntu下安装go开发环境的全过程
Aug 05 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
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
Codeigniter实现处理用户登录验证后的URL跳转
2014/06/12 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
Laravel路由研究之domain解决多域名问题的方法示例
2019/04/04 PHP
JavaScript输入邮箱自动提示实例代码
2014/01/13 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
javascript+canvas制作九宫格小程序
2014/12/28 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
Node.js+Express配置入门教程
2016/05/19 Javascript
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
Vue中使用vux配置代码详解
2018/09/16 Javascript
JSON的parse()方法介绍
2019/01/31 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
bootstrap datepicker的基本使用教程
2019/07/09 Javascript
layer实现弹出层自动调节位置
2019/09/05 Javascript
vue使用Sass时报错问题的解决方法
2020/10/14 Javascript
使用Python的PEAK来适配协议的教程
2015/04/14 Python
Python 3.x 新特性及10大变化
2015/06/12 Python
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
利用Python如何生成随机密码
2016/04/20 Python
win10下Python3.6安装、配置以及pip安装包教程
2017/10/01 Python
python 修改本地网络配置的方法
2019/08/14 Python
pycharm 更改创建文件默认路径的操作
2020/02/15 Python
TensorFlow中如何确定张量的形状实例
2020/06/23 Python
python中selenium库的基本使用详解
2020/07/31 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
母校寄语大全
2014/04/10 职场文书
充分就业社区汇报材料
2014/05/07 职场文书
春游踏青活动方案
2014/08/14 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python
Django中的JWT身份验证的实现
2021/05/07 Python