package diagram import ( "fmt" "github.com/gofrs/uuid" ) var GlobalTree *MultiBranchTreeNode // MultiBranchTreeNode represents a topological structure using an multi branch tree type MultiBranchTreeNode struct { ID uuid.UUID // 节点唯一标识 NodeComponentType int // 节点组件类型 Parent *MultiBranchTreeNode // 指向父节点的指针 Children []*MultiBranchTreeNode // 指向所有子节点的指针切片 } func NewMultiBranchTree(id uuid.UUID, componentType int) *MultiBranchTreeNode { return &MultiBranchTreeNode{ ID: id, NodeComponentType: componentType, Children: make([]*MultiBranchTreeNode, 0), } } func (n *MultiBranchTreeNode) AddChild(child *MultiBranchTreeNode) { child.Parent = n n.Children = append(n.Children, child) } func (n *MultiBranchTreeNode) RemoveChild(childID uuid.UUID) bool { for i, child := range n.Children { if child.ID == childID { n.Children = append(n.Children[:i], n.Children[i+1:]...) child.Parent = nil return true } } return false } func (n *MultiBranchTreeNode) FindNodeByID(id uuid.UUID) *MultiBranchTreeNode { if n.ID == id { return n } for _, child := range n.Children { if found := child.FindNodeByID(id); found != nil { return found } } return nil } func (n *MultiBranchTreeNode) PrintTree(level int) { for i := 0; i < level; i++ { fmt.Print(" ") } fmt.Printf("- ComponentType:%d,(ID: %s)\n", n.NodeComponentType, n.ID) for _, child := range n.Children { child.PrintTree(level + 1) } }