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中semaphore(信号量)源码
Apr 03 Golang
golang http使用踩过的坑与填坑指南
Apr 27 Golang
go类型转换及与C的类型转换方式
May 05 Golang
Goland使用Go Modules创建/管理项目的操作
May 06 Golang
go语言使用Casbin实现角色的权限控制
Jun 26 Golang
golang 实用库gotable的具体使用
Jul 01 Golang
Go语言实现一个简单的并发聊天室的项目实战
Mar 18 Golang
golang实现浏览器导出excel文件功能
Mar 25 Golang
如何解决goland,idea全局搜索快捷键失效问题
Apr 03 Golang
Go微服务项目配置文件的定义和读取示例详解
Jun 21 Golang
Go语言测试库testify使用学习
Jul 23 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
5.PHP的其他功能
2006/10/09 PHP
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
PHP生成树的方法
2015/07/28 PHP
PHP编写简单的App接口
2016/08/28 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
2020/10/30 PHP
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
[46:55]完美世界DOTA2联赛决赛 FTD vs Phoenix 第三场 11.08
2020/11/11 DOTA
[36:33]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.29
2020/12/02 DOTA
python生成IP段的方法
2015/07/07 Python
python简单获取数组元素个数的方法
2015/07/13 Python
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
python中zip()方法应用实例分析
2016/04/16 Python
python八大排序算法速度实例对比
2017/12/06 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
Python如何调用JS文件中的函数
2019/08/16 Python
python中的垃圾回收(GC)机制
2020/09/21 Python
flask项目集成swagger的方法
2020/12/09 Python
使用CSS3的rem属性制作响应式页面布局的要点解析
2016/05/24 HTML / CSS
介绍一下linux文件系统分配策略
2012/11/17 面试题
信息部岗位职责
2013/11/12 职场文书
经典优秀个人求职信分享
2013/12/12 职场文书
大学生活动总结模板
2014/07/02 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书