目录
前言
满足以下两个条件的数就是二叉树:
1.本身是有序树;
2.树中包含的各个节点的度不能超过2,即只能是0、1或者2。
1、前序遍历
示例:用递归的方式遍历。(根左右)
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 = 80
//左子树
var left1 Student
left1.Name = "left1"
left1.Age = 19
left1.Score = 81
root.left = &left1
//右子树
var right1 Student
right1.Name = "right1"
right1.Age = 20
right1.Score = 80
root.right = &right1
//二级左子树
var left2 Student
left2.Name = "left2"
left2.Age = 29
left2.Score = 91
left1.left = &left2
//遍历函数
Req(&root)
}
func Req(tmp *Student) {
if tmp == nil {
return
}
//输出当前节点
fmt.Println(*tmp)
//递归遍历下一个左节点
Req(tmp.left)
//递归遍历下一个右节点
Req(tmp.right)
}
//运行结果为:
{root 18 80 0xc000112480 0xc0001124b0}
{left1 19 81 0xc0001124e0 <nil>}
{left2 29 91 <nil> <nil>}
{right1 20 80 <nil> <nil>}
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 = 80
//左子树
var left1 Student
left1.Name = "left1"
left1.Age = 19
left1.Score = 81
root.left = &left1
//右子树
var right1 Student
right1.Name = "right1"
right1.Age = 20
right1.Score = 80
root.right = &right1
//二级左子树
var left2 Student
left2.Name = "left2"
left2.Age = 29
left2.Score = 91
left1.left = &left2
//遍历函数
Req(&root)
}
func Req(tmp *Student) {
if tmp == nil {
return
}
//递归遍历下一个左节点
Req(tmp.left)
//输出根节点
fmt.Println(*tmp)
//递归遍历下一个右节点
Req(tmp.right)
}
//运行结果为:
{left2 29 91 <nil> <nil>}
{left1 19 81 0xc0000924e0 <nil>}
{root 18 80 0xc000092480 0xc0000924b0}
{right1 20 80 <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 = 80
//左子树
var left1 Student
left1.Name = "left1"
left1.Age = 19
left1.Score = 81
root.left = &left1
//右子树
var right1 Student
right1.Name = "right1"
right1.Age = 20
right1.Score = 80
root.right = &right1
//二级左子树
var left2 Student
left2.Name = "left2"
left2.Age = 29
left2.Score = 91
left1.left = &left2
//遍历函数
Req(&root)
}
func Req(tmp *Student) {
if tmp == nil {
return
}
//递归遍历下一个左节点
Req(tmp.left)
//递归遍历下一个右节点
Req(tmp.right)
//输出根节点
fmt.Println(*tmp)
}
//运行结果为:
{left2 29 91 <nil> <nil>}
{left1 19 81 0xc0000c24b0 <nil>}
{right1 20 80 <nil> <nil>}
{root 18 80 0xc0000c2450 0xc0000c2480}