Go语言 二叉树遍历
2022-04-19 15:28
1561 查看
@[TOC]
1. 二叉树的定义
- 二叉树需满足的条件 ① 本身是有序树 ② 树中包含的各个节点的长度不能超过2,即只能是0、1或者2
![在这里插入图片描述](https://img-blog.csdnimg.cn/313ebd2944a74fb5ad68ee5cb8c697f3.png#pic_center =500x)
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}
相关文章推荐
- 二叉树遍历
- 九度oj-1078-二叉树遍历
- 第十周 项目三 利用二叉树遍历思想解决问题(3)
- 我的Go语言学习之旅二:入门初体验 Hello World
- 在mac系统安装go语言以及配置
- Atitit.go语言golang语言的新的特性 attilax总结
- gedis——go语言开发的redis代理
- Go语言Windows程序设计(3)--创建子窗口
- 华为OJ 二叉树遍历
- PHP实现的线索二叉树及二叉树遍历方法详解
- Go语言的关键字
- Go语言实现将[]string转化为[]byte
- JAVA二叉树遍历(递归和非递归)
- go语言的模板,text/template包
- 二叉树遍历
- go语言beego框架 orm实现insertOrUpdate功能
- 二叉树遍历
- 二叉树遍历(递归、非递归、Morris遍历)
- Java数据结构之二叉树遍历,递归与非递归
- 使用Go语言每分钟处理100万请求