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中semaphore(信号量)源码
Apr 03 Golang
golang interface判断为空nil的实现代码
Apr 24 Golang
golang在GRPC中设置client的超时时间
Apr 27 Golang
golang 如何用反射reflect操作结构体
Apr 28 Golang
基于Go Int转string几种方式性能测试
Apr 28 Golang
goland设置颜色和字体的操作
May 05 Golang
go xorm框架的使用
May 22 Golang
golang中字符串MD5生成方式总结
Jul 04 Golang
Go语言基础函数基本用法及示例详解
Nov 17 Golang
深入理解go缓存库freecache的使用
Feb 15 Golang
Golang 结构体数据集合
Apr 22 Golang
Golang 实现WebSockets
Apr 24 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面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
2017/05/30 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
PHP数组与字符串互相转换实例
2020/05/05 PHP
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
JS实现字体选色板实例代码
2013/11/20 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
浅谈angularJS 作用域
2015/07/05 Javascript
Three.js学习之网格
2016/08/10 Javascript
bootstrap中selectpicker下拉框使用方法实例
2018/03/22 Javascript
Vue项目添加动态浏览器头部title的方法
2018/07/11 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
vue 实现微信浮标效果
2019/09/01 Javascript
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
python简单实现旋转图片的方法
2015/05/30 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
Python3与fastdfs分布式文件系统如何实现交互
2020/06/23 Python
CSS3 实现雷达扫描图的示例代码
2020/09/21 HTML / CSS
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
英国时尚首饰品牌:Missoma
2020/06/29 全球购物
后勤自我鉴定
2013/10/13 职场文书
采购部岗位职责
2013/11/24 职场文书
测绘工程专业求职信
2014/07/15 职场文书
公安机关查摆剖析材料
2014/10/10 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
5.12护士节活动总结
2015/02/10 职场文书
互联网创业商业模式以及赚钱法则有哪些?
2019/10/12 职场文书
Redis中一个String类型引发的惨案
2021/07/25 Redis
Python内置数据结构列表与元组示例详解
2021/08/04 Python
一篇文章弄清楚Ajax请求的五个步骤
2022/03/17 Javascript
根德5570型九灯四波段立体声收音机是电子管收音机的楷模 ? 再论5570
2022/04/05 无线电
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技