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 相关文章推荐
golang interface判断为空nil的实现代码
Apr 24 Golang
golang如何去除多余空白字符(含制表符)
Apr 25 Golang
Golang 实现超大文件读取的两种方法
Apr 27 Golang
浅谈Golang 嵌套 interface 的赋值问题
Apr 29 Golang
解决goland 导入项目后import里的包报红问题
May 06 Golang
golang中的并发和并行
May 08 Golang
Golang表示枚举类型的详细讲解
Sep 04 Golang
Go 通过结构struct实现接口interface的问题
Oct 05 Golang
golang三种设计模式之简单工厂、方法工厂和抽象工厂
Apr 10 Golang
golang操作redis的客户端包有多个比如redigo、go-redis
Apr 14 Golang
GoFrame框架数据校验之校验结果Error接口对象
Jun 21 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项目中比较通用的php自建函数的详解
2013/06/06 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
2013/10/29 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
window.print打印指定div指定网页指定区域的方法
2014/08/04 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
easyUI combobox实现联动效果
2017/01/17 Javascript
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
用最简单的方法判断JavaScript中this的指向(推荐)
2017/09/04 Javascript
微信小程序点击按钮动态切换input的disabled禁用/启用状态功能
2020/03/07 Javascript
python实现机器学习之多元线性回归
2018/09/06 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
wxpython布局的实现方法
2019/11/01 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
allbeauty美国:英国在线美容店
2019/03/11 全球购物
公务员总结性个人自我评价
2013/12/05 职场文书
找工作最新求职信
2013/12/22 职场文书
高中毕业生的个人自我评价
2014/02/21 职场文书
幼儿园母亲节活动方案
2014/03/10 职场文书
买卖车协议书
2014/04/21 职场文书
研发工程师岗位职责
2014/04/28 职场文书
干部考核评语
2014/04/29 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
六查六看自查报告
2014/10/14 职场文书
教你如何使用Python实现二叉树结构及三种遍历
2021/06/18 Python
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python