- 二叉树的定义
- 二叉树是递归循环
- 有很多树,每个树最多有两个子节点,这,被称为二叉树
-
二叉树的遍历
- 前序遍历
- EachByLast前序遍历,
- 先输出root节点,
- 在输出左侧子树,
- 在输出右侧子树
-
- 中序遍历
-
EachByInfixOrder 中序遍历,
-
先输出root左侧子树,
-
在输出root节点,
-
在输出root右侧子树
- 后序遍历
-
EachByPostOrder 后序遍历,
-
先输出root右侧子树,
-
在输出root节点,
-
在输出root左侧子树
- 代码
1 package main 2 3 import "fmt" 4 5 //Cat 猫猫结构体 6 type Cat struct { 7 No int 8 Name string 9 Left *Cat 10 Right *Cat 11 } 12 13 //EachByLast 前序遍历,先输出root节点,在输出左侧子树,在输出右侧子树 14 func EachByLast(catNode *Cat) { 15 if catNode != nil { 16 fmt.Printf("%v %v ", catNode.No, catNode.Name) 17 EachByLast(catNode.Left) 18 EachByLast(catNode.Right) 19 } 20 } 21 22 //EachByInfixOrder 中序遍历,先输出root左侧子树,在输出root节点,在输出root右侧子树 23 func EachByInfixOrder(catNode *Cat) { 24 if catNode != nil { 25 26 EachByInfixOrder(catNode.Left) 27 fmt.Printf("%v %v ", catNode.No, catNode.Name) 28 EachByInfixOrder(catNode.Right) 29 } 30 } 31 32 //EachByPostOrder 后序遍历,先输出root右侧子树,在输出root节点,在输出root左侧子树 33 func EachByPostOrder(catNode *Cat) { 34 if catNode != nil { 35 36 EachByPostOrder(catNode.Right) 37 fmt.Printf("%v %v ", catNode.No, catNode.Name) 38 EachByPostOrder(catNode.Left) 39 40 } 41 } 42 43 func main() { 44 //构建一个二叉树 45 root := &Cat{ 46 No: 1, 47 Name: "汤姆猫", 48 } 49 left1 := &Cat{ 50 No: 2, 51 Name: "小白猫", 52 } 53 left2 := &Cat{ 54 No: 5, 55 Name: "大橘猫", 56 } 57 58 right1 := &Cat{ 59 No: 3, 60 Name: "小黑猫", 61 } 62 right2 := &Cat{ 63 No: 4, 64 Name: "三花猫", 65 } 66 right3 := &Cat{ 67 No: 6, 68 Name: "奶牛猫", 69 } 70 root.Left = left1 71 left1.Left = left2 72 left2.Right = right3 73 root.Right = right1 74 right1.Right = right2 75 76 EachByPostOrder(root) 77 }