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:垃圾回收GC触发条件详解
Apr 24 Golang
go语言求任意类型切片的长度操作
Apr 26 Golang
golang 实现菜单树的生成方式
Apr 28 Golang
解决Go gorm踩过的坑
Apr 30 Golang
Go语言 go程释放操作(退出/销毁)
Apr 30 Golang
goland设置颜色和字体的操作
May 05 Golang
go mod 安装依赖 unkown revision问题的解决方案
May 06 Golang
Golang中异常处理机制详解
Jun 08 Golang
go select编译期的优化处理逻辑使用场景分析
Jun 28 Golang
Go语言空白表示符_的实例用法
Jul 04 Golang
GO语言异常处理分析 err接口及defer延迟
Apr 14 Golang
Go语言怎么使用变长参数函数
Jul 15 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
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
PHP 强制性文件下载功能的函数代码(任意文件格式)
2010/05/26 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
destoon实现VIP排名一直在前面排序的方法
2014/08/21 PHP
PHP安全下载文件的方法
2016/04/07 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
2010/03/09 Javascript
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
jQuery实现内容定时切换效果完整实例
2016/04/06 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
vue如何获取点击事件源的方法
2017/08/10 Javascript
vue渲染时闪烁{{}}的问题及解决方法
2018/03/28 Javascript
详解Axios统一错误处理与后置
2018/09/26 Javascript
nodejs nedb 封装库与使用方法示例
2020/02/06 NodeJs
Node.js API详解之 vm模块用法实例分析
2020/05/27 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
[01:25]2015国际邀请赛最佳短片奖——斧王《拆塔英雄:天赋异禀》
2015/09/22 DOTA
python中sys.argv参数用法实例分析
2015/05/20 Python
Python中static相关知识小结
2018/01/02 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
2018/10/31 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
Python如何测试stdout输出
2020/08/10 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
2021/02/16 Python
C有"按引用传递"吗
2016/09/06 面试题
2013年员工自我评价范文
2013/12/27 职场文书
药店主任岗位责任制
2014/02/10 职场文书
初中生操行评语大全
2014/04/24 职场文书
班组长安全工作职责
2014/07/15 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书