golang的树结构的简单实现,未完善,代码如下:
1 package main 2 3 import ( 4 "fmt" 5 "errors" 6 ) 7 8 func main() { 9 var t Tree 10 t.Create("美利坚合众国") 11 t.AddSon("国土安全部") 12 t.AddSon("财政部") 13 t.AddSon("信息科技部") 14 t.AddSon("能源部") 15 t.AddSon("军事委员会") 16 fmt.Println(t.GetName(), "共有", t.GetDegree(), "个部门") 17 fmt.Println("------------------------------------------") 18 for k, v := range t.son { 19 fmt.Println(t.GetName(), "第", k, "个部门是", v.GetName()) 20 } 21 22 s,err := t.GetSon("国土安全部") 23 if err == nil { 24 s.AddSon("质量安全办") 25 s.AddSon("征地拆迁办") 26 } 27 fmt.Println("==========================================") 28 fmt.Println(s.GetName(), "共有", s.GetDegree(), "个部门") 29 fmt.Println("------------------------------------------") 30 for k, v := range s.son { 31 fmt.Println(s.GetName(), "第", k, "个部门是", v.GetName()) 32 } 33 34 s1,err := s.GetSon("质量安全办") 35 if err == nil { 36 s1.AddSon("特朗普") 37 s1.AddSon("蓬佩奥") 38 s1.AddSon("拜登") 39 s1.AddSon("邓文迪") 40 s1.AddSon("李冰冰") 41 } 42 fmt.Println("==========================================") 43 fmt.Println(s1.GetName(), "共有", s1.GetDegree(), "名员工") 44 fmt.Println("------------------------------------------") 45 for k, v := range s1.son { 46 fmt.Println(s1.GetName(), "第", k, "名员工是", v.GetName()) 47 } 48 s1.DeleteSon("蓬佩奥") 49 fmt.Println("==========================================") 50 fmt.Println(s1.GetName(), "共有", s1.GetDegree(), "名员工") 51 fmt.Println("------------------------------------------") 52 for k, v := range s1.son { 53 fmt.Println(s1.GetName(), "第", k, "名员工是", v.GetName()) 54 } 55 } 56 57 type Tree struct { 58 name string 59 parent *Tree 60 son []*Tree 61 data interface{} 62 } 63 64 func (this *Tree) Create(name string) { 65 this.name = name 66 this.son = nil 67 } 68 69 func (this *Tree) GetName() string { 70 return this.name 71 } 72 73 func (this *Tree) GetSon(nameofson string) (son *Tree, err error) { 74 for _, v := range this.son { 75 if v.GetName() == nameofson { 76 return v,nil 77 } 78 } 79 return nil, errors.New("No son's name call" + nameofson) 80 } 81 82 func (this *Tree) AddSon(nameofson string) { 83 var Son Tree 84 85 Son.name = nameofson 86 Son.parent = this 87 this.son = append(this.son, &Son) 88 } 89 90 func (this *Tree) DeleteSon(nameofson string) { 91 for k, v := range this.son { 92 if v.GetName() == nameofson { 93 this.son = append(this.son[:k], this.son[(k+1):]...) 94 } 95 } 96 } 97 98 func (this Tree) GetDegree() int { 99 return len(this.son) 100 }
运行结果如下:
美利坚合众国 共有 5 个部门 ------------------------------------------ 美利坚合众国 第 0 个部门是 国土安全部 美利坚合众国 第 1 个部门是 财政部 美利坚合众国 第 2 个部门是 信息科技部 美利坚合众国 第 3 个部门是 能源部 美利坚合众国 第 4 个部门是 军事委员会 ========================================== 国土安全部 共有 2 个部门 ------------------------------------------ 国土安全部 第 0 个部门是 质量安全办 国土安全部 第 1 个部门是 征地拆迁办 ========================================== 质量安全办 共有 5 名员工 ------------------------------------------ 质量安全办 第 0 名员工是 特朗普 质量安全办 第 1 名员工是 蓬佩奥 质量安全办 第 2 名员工是 拜登 质量安全办 第 3 名员工是 邓文迪 质量安全办 第 4 名员工是 李冰冰 ========================================== 质量安全办 共有 4 名员工 ------------------------------------------ 质量安全办 第 0 名员工是 特朗普 质量安全办 第 1 名员工是 拜登 质量安全办 第 2 名员工是 邓文迪 质量安全办 第 3 名员工是 李冰冰
这是未完全实现的版本。