详解Go语言如何实现二叉树遍历
作者:隐姓埋名4869 发布时间:2024-04-23 09:44:10
标签:Go语言,二叉树,遍历
1. 二叉树的定义
二叉树需满足的条件
① 本身是有序树
② 树中包含的各个节点的长度不能超过2,即只能是0、1或者2
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}
来源:https://www.cnblogs.com/lvrui/p/16163126.html
0
投稿
猜你喜欢
- 安装PandasPandas是构建在Python编程语言之上的一个快速、强大、灵活且易于使用的开源数据分析和操作工具。Pandas是基于Nu
- 大多数网站维护都采用“多人协作,共同管理”方式。某个人负责一个(或者多个)栏目,他只能对他负责的栏目进
- 今天改插件BoxScroll的时候,因为if里面的条件判断多于两个,于是立马想着改写switch。改到一半,忽然记起来JSHint等代码质量
- 一、下载anaconda第一步当然是下载anaconda了,官方网站的下载需要用迅雷才能快点,或者直接到清华大学镜像站下载。当然这里推荐脚本
- 原始数据TS PERIOD REQUEST STEPPED VALUE STATUS SECONDS20-DEC-16 00:00:00.0
- 这篇论坛文章(赛迪网技术社区)着重介绍了有关SQL注入防御的防御策略及实施步骤,详细内容请参考下文:从去年下半年开始,很多网站被损害,他们在
- 损失函数loss:该参数为模型试图最小化的目标函数,它可为预定义的损失函数名,如categorical_crossentropy、mse,也
- 呵,以前也没考虑过这方面的东西,现在写的代码越来越多,越来越复杂,如果再不把不用的变量及时释放掉,到时肯定会出问题。今天无意中在无忧Q群里看
- 项目需求近日需要实现用户推荐相关的功能,也就是说向用户推荐他可能喜欢的东西。我们的数据分析工程师会将用户以及用户可能喜欢的东西整理成文档给我
- 密码算法程序设计实践选的SHA-1。在写的过程中遇到一丢丢关于python移位的问题,记录一下。SHA-1其中第一步需要填充消息。简单阐述一
- 前言自动化测试中我们存放数据无非是使用文件或者数据库,那么文件可以是csv,xlsx,xml,甚至是txt文件,通常excel文件往往是我们
- 概述今天我们要来做一个进阶的花分类问题. 不同于之前做过的鸢尾花, 这次我们会分析 102 中不同的花. 是不是很上头呀.预处理导包常规操作
- 前言刚开始学习MySQL,下载的是官网最新版本 5.7.14,使用cmd输入中文时报错,于是开始修改mysql默认编码(windows下),
- 1、在给客户系统巡检时通过rman维护日志发现有rman维护日志报错:RMAN-06207: WARNING: 3 objects coul
- 回顾 MySQL / InnoDB 的改善历史。你能很容易发现。在MySQL 5.6稳定版本中从来没有在read-only 这么
- 本文实例为大家分享了python实现人脸签到系统的具体代码,供大家参考,具体内容如下简易版人脸签到/签退系统管理员可进行录入人脸操作,以及导
- 代码案例import pluggy# HookspecMarker 和 HookimplMarker 实质上是一个装饰器带参数的装饰器类,作
- 一、Pylint 是什么Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准和有潜在
- var InterestKeywordListString = $("#userInterestKeywordLabel"
- 代码如下:--新增表字段 ALTER procedure [dbo].[sp_Web_TableFiled_Insert] (