二叉树
- 概念:每个节点最多只能有两个子节点
二叉树的遍历
二叉树
package main
import (
"fmt"
)
type Hero struct {
No int
Name string
Left *Hero
Right *Hero
}
func main() {
//构建一个二叉树
root := &Hero{
No: 1,
Name: "宋江",
}
node2 := &Hero{
No: 2,
Name: "吴用",
}
node3 := &Hero{
No: 3,
Name: "卢俊义",
}
node4 := &Hero{
No: 4,
Name: "林冲",
}
node5 := &Hero{
No: 5,
Name: "tom",
}
node6 := &Hero{
No: 6,
Name: "jack",
}
root.Left = node2
root.Right = node3
node2.Left = node5
node2.Right = node6
node3.Right = node4
fmt.Println("前序遍历")
PreOrder(root)
fmt.Println("中序遍历")
InfixOrder(root)
fmt.Println("后序遍历")
PostOrder(root)
}
- 前序遍历:根左右(宋江、吴用、tom、Jack、卢俊义、林冲)
//前序遍历
func PreOrder(node *Hero){
if node != nil{
fmt.Println("no= %d\n name= %s", node.No, node.Name)
PreOrder(node.Left)
PreOrder(node.Right)
}
}
- 中序遍历:左根右(tom、吴用、Jack、宋江、卢俊义、林冲)
//中序遍历
func InfixOrder(node *Hero){
if node != nil{
InfixOrder(node.Left)
fmt.Println("no= %d\n name= %s", node.No, node.Name)
InfixOrder(node.Right)
}
}
- 后序遍历:左右根(tom、Jack、吴用、林冲、卢俊义、宋江)
//后序遍历
func PostOrder(node *Hero){
if node != nil{
PostOrder(node.Left)
PostOrder(node.Right)
fmt.Println("no= %d\n name= %s", node.No, node.Name)
}
}