ZBLOG

go语言,一个数据库中的数据结构是这样的:type NginxResourceGroup struct { ID int Pid int Name string Remarks string State int },将其组织为树形结构,其根节点的id固定为1,预先设定好, 并不需要实际建立,剩余节点都在此基础上插入,每次插入要做校验,父节点id是否存在或者为1(父节点就是根节点),插入后是否会破坏树形结构,删除时要删除本身节点及其子节点,如果删除的节点...

根据您的描述,您可以使用以下代码将NginxResourceGroup组织为树形结构:

package main

import (
	"fmt"
)

type NginxResourceGroup struct {
	ID      int
	Pid     int
	Name    string
	Remarks string
	State   int
}

type TreeNode struct {
	Node       *NginxResourceGroup
	Children   []*TreeNode // 子节点列表
}

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 := &TreeNode{
		Node: &upGroups[0],
	}

	nodes := make(map[int]*TreeNode)
	nodes[upGroups[0].ID] = rootNode

	for i := 1; i < len(upGroups); i++ {
		node := &TreeNode{
			Node: &upGroups[i],
		}
		
        parent := nodes[upGroups[i].Pid]
        if parent == nil && upGroups[i].Pid != 0 {
            fmt.Printf("Invalid parent ID for node %d\n", upGroups[i].ID)
            continue
        }

        parent.Children = append(parent.Children, node)
        nodes[upGroups[i].ID] = node

        if !isValidTree(rootNode) {
            fmt.Printf("Invalid tree structure after inserting node %d\n", upGroups[i].ID)
            parent.Children = parent.Children[:len(parent.Children)-1] // Remove the inserted node
            delete(nodes, upGroups[i].ID)
        }
	}

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

func isValidTree(node *TreeNode) bool {
	if node == nil {
		return true
	}

	for _, child := range node.Children {
		if child.Node.Pid != node.Node.ID {
			return false
		}
		
		if !isValidTree(child) {
			return false
		}
	}

	return true
}

func printTree(node *TreeNode, indent string) {
	fmt.Println(indent + node.Node.Name)

	for _, child := range node.Children {
		printTree(child, indent+"   ")
	}
}

在上述代码中,我们首先创建了一个名为TreeNode的结构体,用于表示树节点。然后,我们遍历从数据库获取的节点数据,并根据父节点关系将其插入到相应的位置。同时,还进行了一些校验操作来确保插入不会破坏树形结构。最后,我们使用递归方式打印整个树形结构。

请注意,示例代码中的数据是手动定义的示例数据,请替换为您从数据库中获取到的实际数据。另外,示例代码只展示了基本操作和验证步骤,并未涉及与数据库的交互部分,您可以根据实际情况将其与您的数据库交互逻辑结合起来。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?