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缓冲channel和非缓冲channel的区别说明
Apr 25 Golang
Golang 实现超大文件读取的两种方法
Apr 27 Golang
Golang全局变量加锁的问题解决
May 08 Golang
go xorm框架的使用
May 22 Golang
go语言中http超时引发的事故解决
Jun 02 Golang
试了下Golang实现try catch的方法
Jul 01 Golang
Go中的条件语句Switch示例详解
Aug 23 Golang
Golang 1.18 多模块Multi-Module工作区模式的新特性
Apr 11 Golang
Go语言安装并操作redis的go-redis库
Apr 14 Golang
Golang 入门 之url 包
May 04 Golang
Go语言编译原理之源码调试
Aug 05 Golang
Go gorilla securecookie库的安装使用详解
Aug 14 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使用ffmpeg给视频增加字幕显示的方法
2015/03/12 PHP
php利用反射实现插件机制的方法
2015/03/14 PHP
php使用get_class_methods()函数获取分类的方法
2016/07/20 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
动态加载JS文件的三种方法
2013/11/08 Javascript
动态标签 悬停效果 延迟加载示例代码
2013/11/21 Javascript
js实现导航吸顶效果
2017/02/24 Javascript
浅谈node中的exports与module.exports的关系
2017/08/01 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
jquery中有哪些api jQuery主要API
2017/11/20 jQuery
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
vue.js 添加 fastclick的支持方法
2018/08/28 Javascript
Javascript中弹窗confirm与prompt的区别
2018/10/26 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
layui写后台表格思路和赋值用法详解
2019/11/14 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
python3实现ftp服务功能(客户端)
2017/03/24 Python
Django学习笔记之ORM基础教程
2018/03/27 Python
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
解决python使用list()时总是报错的问题
2020/05/05 Python
Python在字符串中处理html和xml的方法
2020/07/31 Python
前端隐藏出边界内容的实现方法
2016/04/14 HTML / CSS
Claire’s法国:时尚配饰、美容、珠宝、头发
2021/01/16 全球购物
学生自我鉴定范文
2013/10/04 职场文书
项目合作计划书
2014/01/09 职场文书
小学生学习感言
2014/03/10 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python