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在GRPC中设置client的超时时间
Apr 27 Golang
golang DNS服务器的简单实现操作
Apr 30 Golang
完美解决golang go get私有仓库的问题
May 05 Golang
解决goland 导入项目后import里的包报红问题
May 06 Golang
golang实现一个简单的websocket聊天室功能
Oct 05 Golang
Go语言基础切片的创建及初始化示例详解
Nov 17 Golang
Go并发4种方法简明讲解
Apr 06 Golang
Go语言安装并操作redis的go-redis库
Apr 14 Golang
Golang日志包的使用
Apr 20 Golang
Golang bufio详细讲解
Apr 21 Golang
Go语言入门exec的基本使用
May 20 Golang
Go语言编译原理之变量捕获
Aug 05 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
CodeIgniter配置之SESSION用法实例分析
2016/01/19 PHP
jsTree树控件(基于jQuery, 超强悍)[推荐]
2009/09/01 Javascript
写出更好的JavaScript之undefined篇(上)
2009/11/22 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
javascript ajax的5种状态介绍
2014/08/18 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
js实现水平滚动菜单导航
2017/07/21 Javascript
详解基于mpvue微信小程序下载远程图片到本地解决思路
2019/05/16 Javascript
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
解决vue的router组件component在import时不能使用变量问题
2020/07/26 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
Python的Django框架使用入门指引
2015/04/15 Python
浅谈Python中的闭包
2015/07/08 Python
Python类的动态修改的实例方法
2017/03/24 Python
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
Python爬虫抓取代理IP并检验可用性的实例
2018/05/07 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
python里的单引号和双引号的有什么作用
2020/06/17 Python
Python代码执行时间测量模块timeit用法解析
2020/07/01 Python
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
几道Web/Ajax的面试题
2016/11/05 面试题
青年文明号创建承诺
2014/03/31 职场文书
学校社会实践活动总结
2014/07/03 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
学前班学生评语
2014/12/29 职场文书
Python OpenCV形态学运算示例详解
2022/04/07 Python
python实现商品进销存管理系统
2022/05/30 Python