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

作者:隐姓埋名4869 时间:2024-04-23 09:44:10 

1. 二叉树的定义

二叉树需满足的条件

① 本身是有序树

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

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

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. 中序遍历

中序遍历:左&mdash;&mdash;》根&mdash;&mdash;》右

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. 后序遍历

后序遍历:左&mdash;&mdash;》右&mdash;&mdash;》根

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

标签:Go语言,二叉树,遍历
0
投稿

猜你喜欢

  • python Selenium实现付费音乐批量下载的实现方法

    2023-02-28 17:26:58
  • Python实现基于socket的udp传输与接收功能详解

    2023-09-04 03:23:20
  • Python无头爬虫下载文件的实现

    2023-11-30 03:24:00
  • 用户分类浅谈

    2009-09-27 12:14:00
  • Web 前端优化最佳实践之 Cookie 篇

    2008-06-25 13:00:00
  • 详解Python中使用base64模块来处理base64编码的方法

    2022-01-12 01:27:19
  • python编写函数注意事项总结

    2021-08-19 22:15:10
  • python中dump与dumps实现序列化

    2023-01-13 22:46:16
  • tensorflow 变长序列存储实例

    2023-08-28 01:05:40
  • 在GitHub Pages上使用Pelican搭建博客的教程

    2021-08-02 18:47:48
  • python+matplotlib绘制3D条形图实例代码

    2022-05-03 16:36:56
  • 全兼容的纯CSS级联菜单要点浅析

    2009-06-10 14:42:00
  • python tensorflow基于cnn实现手写数字识别

    2023-05-09 06:22:06
  • python二维列表一维列表的互相转换实例

    2023-07-09 10:27:40
  • Python的索引与切片原来该这样理解

    2023-11-21 16:17:51
  • Python中列表的一些基本操作知识汇总

    2022-04-08 07:12:28
  • python os.path模块使用方法介绍

    2023-08-03 18:02:32
  • 什么是python类属性

    2021-07-31 20:27:16
  • python3.6 如何将list存入txt后再读出list的方法

    2022-03-03 07:30:26
  • mysql 安装使用小记

    2011-02-23 12:33:00
  • asp之家 网络编程 m.aspxhome.com