首页 > 技术文章 > GoLang 数据结构-二叉树

alanshreck 2020-12-22 21:59 原文

  • 二叉树的定义
  • 二叉树是递归循环
  • 有很多树,每个树最多有两个子节点,这,被称为二叉树

 

 

  • 二叉树的遍历

 

  • 前序遍历
  • 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\n", 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\n", 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\n", 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 }
猫猫二叉树案例代码

 

推荐阅读