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 02 Golang
go语言求任意类型切片的长度操作
Apr 26 Golang
Golang 使用Map实现去重与set的功能操作
Apr 29 Golang
golang gopm get -g -v 无法获取第三方库的解决方案
May 05 Golang
完美解决golang go get私有仓库的问题
May 05 Golang
Golang之sync.Pool使用详解
May 06 Golang
golang中的并发和并行
May 08 Golang
Go语言基础知识点介绍
Jul 04 Golang
Go并发4种方法简明讲解
Apr 06 Golang
Golang 对es的操作实例
Apr 20 Golang
Golang日志包的使用
Apr 20 Golang
Golang实现可重入锁的示例代码
May 25 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中与数组相关的函数
2007/03/22 PHP
获取远程文件大小的php函数
2010/01/11 PHP
php正则表达匹配中文问题分析小结
2012/03/25 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
2014/07/18 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
6款经典实用的jQuery小插件及源码(对话框/提示工具等等)
2013/02/04 Javascript
使用js修改客户端注册表的方法
2013/08/09 Javascript
js 获取、清空input type=&quot;file&quot;的值(示例代码)
2013/12/24 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
JavaScript中string对象
2015/06/12 Javascript
javascript实现九宫格相加数值相等
2020/05/28 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
微信小程序 高德地图路线规划实现过程详解
2019/08/05 Javascript
详解Python中映射类型(字典)操作符的概念和使用
2015/08/19 Python
Python查询IP地址归属完整代码
2017/06/21 Python
使用tensorflow实现AlexNet
2017/11/20 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
Django Rest framework之权限的实现示例
2018/12/17 Python
python输出决策树图形的例子
2019/08/09 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
HTML5 File接口在web页面上使用文件下载
2017/02/27 HTML / CSS
Optimalprint加拿大:在线打印服务
2020/04/03 全球购物
旅游与环境专业求职信
2014/06/05 职场文书
学校欢迎标语
2014/06/18 职场文书
禁毒宣传标语
2014/06/19 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
同学联谊会邀请函
2019/06/24 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
Python编程super应用场景及示例解析
2021/10/05 Python
JavaCV实现照片马赛克效果
2022/01/22 Java/Android