ZBLOG

不要新增TreeNode这一级,可以在NginxResourceGroup下增加Children []int ,记录所有子节点的数据库id

如果您想在NginxResourceGroup结构中记录子节点的数据库ID,可以将Children字段改为[]int类型,并在每次插入或删除操作时更新这个字段。以下是一个示例代码:

package main

import (
	"fmt"
)

type NginxResourceGroup struct {
	ID       int
	Pid      int
	Name     string
	Remarks  string
	State    int
	Children []int // 子节点的数据库ID列表
}

func main() {
	upGroups := []NginxResourceGroup{
		{ID: 1, Pid: 0, Name: "Root", Remarks: "", State: 1},
		{ID: 2, Pid: 1, Name: "Child 1", Remarks: "", State: 1},
		{ID: 3, Pid: 2, Name: "Grandchild 1", Remarks: "", State: 1},
		{ID: 4, Pid: 1, Name: "Child 2", Remarks:"", State:1},
	}
	
	rootNode := &upGroups[0]

	nodes := make(map[int]*NginxResourceGroup)
	nodes[rootNode.ID] = rootNode
	
	for i := 1; i < len(upGroups); i++ {
	    node := &upGroups[i]
	    
	    parent := nodes[node.Pid]
	    if parent == nil && node.Pid !=0 {
	        fmt.Printf("Invalid parent ID for node %d\n", node.ID)
	        continue
	    }
	    
	    parent.Children = append(parent.Children, node.ID)
	    nodes[node.ID] = node
	    
        if !isValidTree(nodes) {
            fmt.Printf("Invalid tree structure after inserting node %d\n", node.ID)
            parent.Children = parent.Children[:len(parent.Children)-1] // Remove the inserted node
            delete(nodes, node.ID)
        }
	}

	fmt.Println("Tree structure:")
	printTree(rootNode, 0, nodes)
}

func isValidTree(nodes map[int]*NginxResourceGroup) bool {
	for _, node := range nodes {
	    parent := nodes[node.Pid]
	    if parent == nil && node.Pid != 0 {
	        return false
	    }
	}
	
	return true
}

func printTree(node *NginxResourceGroup, level int, nodes map[int]*NginxResourceGroup) {
	fmt.Printf("%s%s (ID: %d)\n", getIndent(level), node.Name, node.ID)

	for _, childID := range node.Children {
	    child := nodes[childID]
	    printTree(child, level+1, nodes)
	}
}

func getIndent(level int) string {
	indent := ""
	for i := 0; i < level; i++ {
		indent += "   "
	}
	return indent
}

在此示例代码中,我们更新了NginxResourceGroup结构体,将Children字段从[]*TreeNode类型更改为[]int类型,并在插入节点时更新相应的父节点的子节点列表。我们还使用一个名为nodes的映射来存储所有节点,并用于校验和打印树形结构。

注意:这只是一个示例实现,您需要根据您的实际数据库操作逻辑进行相应的修改和适配。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=14042

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?