Golang的树的实现

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 名员工是 李冰冰

这是未完全实现的版本。

原文地址:https://www.cnblogs.com/merrynuts/p/13470329.html