脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - 详解Go语言如何实现二叉树遍历

详解Go语言如何实现二叉树遍历

2022-09-25 12:08隐姓埋名4869 Golang

这篇文章主要为大家详解介绍了Go语言中如何实现二叉树遍历,文中的示例代码讲解详细,对我们学习Go语言有一定帮助,需要的可以参考一下

1. 二叉树的定义

二叉树需满足的条件

① 本身是有序树

② 树中包含的各个节点的长度不能超过2,即只能是0、1或者2

详解Go语言如何实现二叉树遍历

2. 前序遍历

前序遍历二叉树的顺序:根——》左——》右

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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. 中序遍历

中序遍历:左——》根——》右

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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. 后序遍历

后序遍历:左——》右——》根

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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语言如何实现二叉树遍历的文章就介绍到这了,更多相关Go语言二叉树遍历内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/lvrui/p/16163126.html

延伸 · 阅读

精彩推荐
  • GolangGo常用技能日志log包创建使用示例

    Go常用技能日志log包创建使用示例

    这篇文章主要为大家介绍了Go常用技能日志log包创建使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    梦想橡皮擦6712022-08-01
  • Golanggo RWMutex的实现示例

    go RWMutex的实现示例

    本文主要来介绍读写锁的一种Go语言的实现方式RWMutex,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    机智的小小帅7582022-09-06
  • Golang我为什么喜欢Go语言(简洁的Go语言)

    我为什么喜欢Go语言(简洁的Go语言)

    从2000年至今,也写了11年代码了,期间用过VB、Delphi、C#、C++、Ruby、Python,一直在寻找一门符合自己心意和理念的语言。我很在意写代码时的手感和执行的...

    mdxy-dxy4822019-11-28
  • GolangGo定时器cron的使用详解

    Go定时器cron的使用详解

    本篇文章主要介绍了Go定时器cron的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    骑头猪逛街2572020-05-13
  • Golang如何解决goland,idea全局搜索快捷键失效问题

    如何解决goland,idea全局搜索快捷键失效问题

    这篇文章主要介绍了如何解决goland,idea全局搜索快捷键失效问题,快捷键失效,可能是快捷键冲突,也或者是快捷键被修改成其他了。在settings下查看快捷键...

    峰啊疯了4752022-09-13
  • Golang解决Golang time.Parse和time.Format的时区问题

    解决Golang time.Parse和time.Format的时区问题

    这篇文章主要介绍了解决Golang time.Parse和time.Format的时区问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    我要认真学习了6922021-06-09
  • Golanggo语言实现字符串base64编码的方法

    go语言实现字符串base64编码的方法

    这篇文章主要介绍了go语言实现字符串base64编码的方法,实例分析了Go语言操作字符串的技巧及base64编码的使用技巧,需要的朋友可以参考下 ...

    令狐不聪5272020-04-24
  • GolangGo语言集成mysql驱动、调用数据库、查询数据操作示例

    Go语言集成mysql驱动、调用数据库、查询数据操作示例

    这篇文章主要介绍了Go语言集成mysql驱动、调用数据库、查询数据操作,结合实例形式分析了Go语言安装mysql驱动包、连接mysql数据库及查询等相关操作技巧,需...

    学习笔记6663502020-05-25